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
fonte
2016-11-08 15:07:37
Grazie, mi ha davvero aiutato! :) – rohit
Perché non hai preferito il servizio che deve controllare. ? – rohit
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