Фоновая музыка останавливается во время занятий

Как сделать так, чтобы сервис (фоновая музыка) отключался при закрытии приложения или выключении экрана, а не при переключении на другое занятие?

В настоящее время музыка играет нормально, длится до тех пор, пока экран не выключится или не закрою приложение, но также закроется при переключении на другое занятие. Это, вероятно, вызвано onStop а также onPause присваивается каждому виду деятельности. Пожалуйста, помогите мне решить эту проблему

Мой сервис:

public class MyService extends Service {


private 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.music;
    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;
}


protected void onStop() {
    player.pause();
}

public void onPause() {
    player.pause();
}

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

@Override
public void onLowMemory() {

}

}

Мой пример деятельности имеет это:

public void onPause() {
    super.onPause();
    stopService(new Intent(a.this, MyService.class));



}

public void onStop() {
    super.onStop();
    stopService(new Intent(a.this, MyService.class));

}

public void onResume() {
    super.onResume();
    startService(new Intent(a.this, MyService.class));

}

public void onRestart() {
    super.onRestart();
    startService(new Intent(a.this, MyService.class));

}

2 ответа

Используйте этот код.

Удалить эту строку:

player.pause ();

public class MyService extends Service {


private 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.music;
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;
}

protected void onStop() {
//player.pause();
}

public void onPause() {
//player.pause();
}

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

@Override
public void onLowMemory() {
 }
}

Есть два способа, которые я могу предложить

1) пусть он будет в onPause(), создайте флаг / логическое значение, которое будет по умолчанию установлено в false и будет истинным в каждом случае, например при запуске новой активности, при нажатии на спину и т. Д., Так что если вызывается onPause и flag равен false Вы можете остановить музыку.

2) у вас уже есть фоновый сервис, вы можете продолжать проверять, какие действия находятся на переднем плане, если homeScreen, вы можете остановить музыку.

Изменить:- чтобы узнать, если ваше приложение не на переднем плане

проверьте эту ссылку

это хороший пример

Другие вопросы по тегам