Я собираю музыкальный плеер с exoplayer. Я использую отдельный сервис для воспроизведения музыки, но проблема в том, что музыка продолжает играть, даже когда я закрываю основное действие, перейдя к недавним. Я попытался решить эту проблему, остановив службу при вызове onDestroy (). Однако это также останавливает музыкальную службу при нажатии кнопки возврата. Я проверил оба случая в Musixmatch, и он останавливается, если вы закрываете приложение из последних, но не останавливается, когда вы нажимаете кнопку возврата в приложении, хотя я вижу, что основное действие создается снова при повторном запуске приложения. Итак, как я могу добиться того же в своем приложении?
Когда останавливать музыку в музыкальном плеере
Ответы (2)
У меня есть образец звукового проекта для Android - когда я перехожу к недавнему и «закрываю все», мой звук останавливается. И используя goBack - вы можете сделать паузу, но если вы этого не сделаете, она продолжит воспроизведение.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_audio);
mediaPlayer = MediaPlayer.create(this,R.raw.oldcar);
mediaPlayer.start();
}
public void goBack(View view){
//mediaPlayer.pause();
Log.i("info","ending audio activity");
finish();
}
Поэтому нам нужно остановить службу, когда задача будет удалена из последних. Для этого вы можете взглянуть на решение «остановить службу при удалении приложения через недавнее приложение».
По сути, он предлагает остановить службу при вызове public void onTaskRemoved(Intent rootIntent)
.
1). В вашем манифесте добавьте атрибут stopWithTask, в котором вы определили свою службу:
<service
android:enabled="true"
android:name=".YourService"
android:exported="false"
android:stopWithTask="true" />
2) .Если вышеуказанный подход действительно работает, то сделайте обратное.
<service
android:enabled="true"
android:name=".MyService"
android:exported="false"
android:stopWithTask="false" /> //change to false
Таким образом, будет вызван метод вашей службы onTaskRemoved. (Помните, он не будет вызываться, если вы установите для stopWithTask значение true).
public class YourService extends Service {
@Override
public void onStartService() {
//your code
}
@Override
public void onTaskRemoved(Intent rootIntent) {
System.out.println("onTaskRemoved called");
super.onTaskRemoved(rootIntent);
//do something you want
//stop service
this.stopSelf();
}
}