Когда останавливать музыку в музыкальном плеере

Я собираю музыкальный плеер с exoplayer. Я использую отдельный сервис для воспроизведения музыки, но проблема в том, что музыка продолжает играть, даже когда я закрываю основное действие, перейдя к недавним. Я попытался решить эту проблему, остановив службу при вызове onDestroy (). Однако это также останавливает музыкальную службу при нажатии кнопки возврата. Я проверил оба случая в Musixmatch, и он останавливается, если вы закрываете приложение из последних, но не останавливается, когда вы нажимаете кнопку возврата в приложении, хотя я вижу, что основное действие создается снова при повторном запуске приложения. Итак, как я могу добиться того же в своем приложении?


person Ayush Singh    schedule 07.09.2018    source источник


Ответы (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();
}
person Sai    schedule 07.09.2018

Поэтому нам нужно остановить службу, когда задача будет удалена из последних. Для этого вы можете взглянуть на решение «остановить службу при удалении приложения через недавнее приложение».

По сути, он предлагает остановить службу при вызове 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();
    }
}
person Nishant Chauhan    schedule 07.09.2018