Android reproduciendo música en fondo

Tengo Mi código de actividad como a continuación:

public class Player extends Activity implements OnCompletionListener, OnPreparedListener, OnErrorListener, OnBufferingUpdateListener, MusicFocusable { private Boolean playState = false; private String station = "http://38.101.19.5:9157"; public static final float DUCK_VOLUME = 0.1f; private String artistName = null; private String trackName = null; private TextView artist; private TextView track; private TextView status; private Button play; enum AudioFocus { NoFocusNoDuck, // we don't have audio focus, and can't duck NoFocusCanDuck, // we don't have focus, but can play at a low volume // ("ducking") Focused // we have full audio focus } private AudioFocus mAudioFocus = AudioFocus.NoFocusNoDuck; private MediaPlayer mPlayer = null; private AndroidShoutcastLib shoutcast; private AudioManager mAudioManager; AudioFocusHelper mAudioFocusHelper = null; Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_player); mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE); // create the Audio Focus Helper, if the Audio Focus feature is // available (SDK 8 or above) if (android.os.Build.VERSION.SDK_INT >= 8) { mAudioFocusHelper = new AudioFocusHelper(getApplicationContext(), this); } else { mAudioFocus = AudioFocus.Focused; // no focus feature, so we always "have" audio focus } status = (TextView) findViewById(R.id.status); artist = (TextView) findViewById(R.id.artist); artist.setSelected(true); track = (TextView) findViewById(R.id.track); track.setSelected(true); play = (Button) findViewById(R.id.play); play.setOnClickListener(new OnClickListener() { @Override public void onClick(View btn) { if (!playState) { play.setText("Pause"); handler.postDelayed(handlePlayRequest, 300); } else { play.setText("Play"); status.setText("Press Play"); handler.postDelayed(handlePlayRequest, 300); } } }); shoutcast = new AndroidShoutcastLib(); try { shoutcast.setShoutcastUrl(station); } catch (InvalidStreamURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } shoutcast.setOnMetadataChangedListener(new MetadataListener(){ @Override public void OnMetadataChanged(Metadata item) { artistName = item.artist; trackName = item.track; updateMeta(); } }); setVolumeControlStream(AudioManager.STREAM_MUSIC); } public void onDestroy() { super.onDestroy(); shoutcast = null; handler.removeCallbacks(handlePlayRequest); } public void updateMeta() { handler.post(new Runnable() { @Override public void run() { // This gets executed on the UI thread so it can safely modify Views artist.setText(artistName); track.setText(trackName); } }); } private final Runnable handlePlayRequest = new Runnable() { public void run() { if (playState) { Log.d("Player", "Stop Called"); giveUpAudioFocus(); mPlayer.stop(); mPlayer.reset(); mPlayer.release(); shoutcast.stopStream(); mPlayer = null; playState = false; } else { Log.d("Player", "Play Called"); createMediaPlayer(); getAudioFocus(); try { mPlayer.setDataSource(shoutcast.startStream()); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvalidStreamURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } mPlayer.prepareAsync(); } } }; private void createMediaPlayer() { mPlayer = new MediaPlayer(); // Make sure the media player will acquire a wake-lock while // playing. If we don't do // that, the CPU might go to sleep while the song is playing, // causing playback to stop. // // Remember that to use this, we have to declare the // android.permission.WAKE_LOCK // permission in AndroidManifest.xml. mPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK); // we want the media player to notify us when it's ready preparing, // and when it's done // playing: mPlayer.setOnPreparedListener(this); mPlayer.setOnCompletionListener(this); mPlayer.setOnErrorListener(this); } private void startPlayer() { mPlayer.setVolume(1.0f, 1.0f); if (!mPlayer.isPlaying()) { Log.d("Player", "Starting Playback"); mPlayer.start(); playState = true; status.setText("Streaming"); } } private void getAudioFocus() { if (mAudioFocus != AudioFocus.Focused && mAudioFocusHelper != null && mAudioFocusHelper.requestFocus()) mAudioFocus = AudioFocus.Focused; } private void giveUpAudioFocus() { if (mAudioFocus == AudioFocus.Focused && mAudioFocusHelper != null && mAudioFocusHelper.abandonFocus()) mAudioFocus = AudioFocus.NoFocusNoDuck; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_player, menu); return true; } @Override public void onBufferingUpdate(MediaPlayer arg0, int arg1) { // TODO Auto-generated method stub } @Override public boolean onError(MediaPlayer mp, int what, int extra) { playState = false; handler.post(handlePlayRequest); return false; } @Override public void onPrepared(MediaPlayer arg0) { startPlayer(); } @Override public void onCompletion(MediaPlayer arg0) { // TODO Auto-generated method stub } @Override public void onGainedAudioFocus() { // TODO Auto-generated method stub } @Override public void onLostAudioFocus(boolean canDuck) { // TODO Auto-generated method stub } } 

Mi requisito es convertir esta actividad a la clase de servicio, he intentado pero no conseguir, porque soy nuevo a Android así como nuevo a programar,

¿Podría alguien ayudar?

Si sólo necesitas reproducir música en tu aplicación, puedes reproducirla en un hilo lanzado desde tu aplicación / utilizar la clase AsyncTask para hacerlo por ti.

Utilice este código. Agregue esta clase (Incluida en su clase de actividad).

 public class BackgroundSound extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { MediaPlayer player = MediaPlayer.create(YourActivity.this, R.raw.test_cbr); player.setLooping(true); // Set looping player.setVolume(100,100); player.start(); return null; } } 

Por otro lado, si desea utilizar un servicio puede mirar esta página .

Pocos pasos a seguir

1.Primero revise los ejemplos de servicio.

2.Desde esta actividad iniciar un servicio es decir, siempre que esta aplicación abrió navegar la actividad para el servicio de la actividad —-> servicio.

3. En el servicio override onstart ().

4.In onstart () crear la función musicplayer y cal la canción que desee.

5.Y comenzar como este mp.play ();

6. Ahora se ejecutará en el fondo

En primer lugar, asegúrese de entender por qué utilizar un servicio y no AsyncTask. Esto es realmente útil para el mismo y muestra por qué debe utilizar un servicio en lugar de AsyncTask para reproducir música en segundo plano.

Esto será muy útil para usted. Se muestra claramente cómo utilizar un servicio para reproducir música en segundo plano.

  • Múltiples temas en la actividad / servicio de Android
  • ¿Cómo comprobar si SpeechRecognizer se está ejecutando actualmente?
  • ¿Es posible crear el widget como Google Play Música en la pantalla de bloqueo?
  • Cómo mantener mi servicio de aplicación sigue funcionando incluso si la aplicación está cerrada desde el administrador de tareas en MI teléfono
  • Cómo evitar el servicio de asesinato del sistema cuando se cancela la aplicación / actividad
  • Uso de Dagger 2 para inyectar en servicio
  • ¿Cómo inicio un servicio desde mi Interactor usando el patrón MVP en android?
  • Servicio de Android interactuando con múltiples actividades
  • Servicio Android android.os.BinderProxy error
  • No se puede iniciar el servicio Intent {cmp = com.marie.mainactivity / .BackgroundService}: no encontrado
  • Cómo obtener el comportamiento del usuario en el teléfono Android (Historial de aplicaciones, Historial de exploraciones, etc.)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.