26

Sto sviluppando un'app di intrattenimento in Android. Voglio suonare musica di sottofondo e voglio usare il servizio per questo. L'app ha 3 attività e la musica deve essere riprodotta in tutte le attività. Inoltre, quando l'attività è in pausa, la musica deve essere PAUSA e arrestata una volta distrutta. Qualcuno può dirmi come farlo ? link o esempi?Servizio musicale di sottofondo Android

Grazie.

risposta

48

farlo senza servizio

http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion

Se sei così sul serio farlo con servizi utilizzando mediaplayer

Intent svc=new Intent(this, BackgroundSoundService.class); 
startService(svc); 

public class BackgroundSoundService extends Service { 
    private static final String TAG = null; 
    MediaPlayer player; 
    public IBinder onBind(Intent arg0) { 

     return null; 
    } 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     player = MediaPlayer.create(this, R.raw.idil); 
     player.setLooping(true); // Set looping 
     player.setVolume(100,100); 

    } 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     player.start(); 
     return 1; 
    } 

    public void onStart(Intent intent, int startId) { 
     // TO DO 
    } 
    public IBinder onUnBind(Intent arg0) { 
     // TO DO Auto-generated method 
     return null; 
    } 

    public void onStop() { 

    } 
    public void onPause() { 

    } 
    @Override 
    public void onDestroy() { 
     player.stop(); 
     player.release(); 
    } 

    @Override 
    public void onLowMemory() { 

    } 
} 

Pl Facilità chiamare questo servizio nel manifesto assicurarsi che non v'è alcun spazio alla fine della stringa .BackgroundSoundService

<service android:enabled="true" android:name=".BackgroundSoundService" /> 
+3

Grazie, mi ha davvero aiutato! :) – rohit

+0

Perché non hai preferito il servizio che deve controllare. ? – rohit

+0

grazie! funziona bene ma ho un problema con questo codice. Nella mia applicazione ho molte attività ma ho dichiarato finish() in onPause().Voglio giocare a bgm mentre sto guardando le intenzioni ma intendo le chiamate in pausa e gli arresti di servizio (metodo di finitura cz nel metodo onpause). Hai qualche soluzione? – Hassy31

6

C'è un eccellente tutorial su questo argomento allo HelloAndroid per quanto riguarda questo argomento. Infatti è stato il primo successo che ho avuto su google. Dovresti provare a googling prima di chiedere qui, dato che è una buona pratica.

4

Ho avuto problemi a farlo funzionare e faccio alcuni cambiamenti di eseguirlo con fonte mp3. ecco il file BackfrounSoundService.java. considera che il mio file mp3 è nella mia sdcard nel mio telefono.

public class BackgroundSoundService extends Service { 
    private static final String TAG = null; 
    MediaPlayer player; 

    public IBinder onBind(Intent arg0) { 

     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Log.d("service", "onCreate"); 
     player = new MediaPlayer(); 
     try { 
      player.setDataSource(Environment.getExternalStorageDirectory().getAbsolutePath() + "/your file.mp3"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     player.setLooping(true); // Set looping 
     player.setVolume(100, 100); 

    } 

    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.d("service", "onStartCommand"); 
     try { 
      player.prepare(); 
      player.start(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return 1; 
    } 

    public void onStart(Intent intent, int startId) { 
     // TO DO 
    } 

    public IBinder onUnBind(Intent arg0) { 
     // TO DO Auto-generated method 
     return null; 
    } 

    public void onStop() { 

    } 

    public void onPause() { 

    } 

    @Override 
    public void onDestroy() { 
     player.stop(); 
     player.release(); 
    } 

    @Override 
    public void onLowMemory() { 

    } 
} 
6

@ risposta di Synxmax è corretto quando si utilizza un Service e la classe MediaPlayer, ma anche è necessario dichiarare la Service nel Manifesto per far funzionare tutto questo, in questo modo:

<service 
    android:enabled="true" 
    android:name="com.package.name.BackgroundSoundService" /> 
6

troppo tardi per la festa qui, ma aggiungerò ancora $ 0.02, Google ha rilasciato un campione gratuito chiamato Universal Music Player con il quale è possibile imparare a riprodurre musica in streaming su tutte le piattaforme Android (auto, guarda, mobile, tv ..) utilizza il servizio per giocare musica in sottofondo, controlla molto utile. ecco il link al progetto
https://github.com/googlesamples/android-UniversalMusicPlayer

1

Creare un servizio di primo piano con la bandiera START_STICKY.

@Override 
public int onStartCommand(Intent startIntent, int flags, int startId) { 
    if (startIntent != null) { 
     String action = startIntent.getAction(); 
     String command = startIntent.getStringExtra(CMD_NAME); 
     if (ACTION_CMD.equals(action)) { 
      if (CMD_PAUSE.equals(command)) { 
       if (mPlayback != null && mPlayback.isPlaying()) { 
        handlePauseRequest(); 
       } 
      } else if (CMD_PLAY.equals(command)) { 
       ArrayList<Track> queue = new ArrayList<>(); 
       for (Parcelable input : startIntent.getParcelableArrayListExtra(ARG_QUEUE)) { 
        queue.add((Track) Parcels.unwrap(input)); 
       } 
       int index = startIntent.getIntExtra(ARG_INDEX, 0); 
       playWithQueue(queue, index); 
      } 
     } 
    } 

    return START_STICKY; 
} 

Questo può quindi essere chiamato da qualsiasi attività a suonare una musica

Intent intent = new Intent(MusicService.ACTION_CMD, fileUrlToPlay, activity, MusicService::class.java) 
intent.putParcelableArrayListExtra(MusicService.ARG_QUEUE, tracks) 
intent.putExtra(MusicService.ARG_INDEX, position) 
intent.putExtra(MusicService.CMD_NAME, MusicService.CMD_PLAY) 
activity.startService(intent) 

È possibile associare al servizio utilizzando bindService e per rendere la pausa Servizio/stop dai corrispondenti metodi di attività del ciclo di vita.

Ecco un buon tutorial su Playing music in the background on Android