2016-12-29 2 views
-1

У меня есть служба, которая играет фоновую музыку во всех действиях моего приложения. В любой деятельности, я добавил:Служба фоновой музыки не отключается

public void onPause() { 
    super.onPause(); 
    stopService(new Intent(OpenerPlay.this, MusicDoctorService.class)); 

} 

public void onStop() { 
    super.onStop(); 
    stopService(new Intent(OpenerPlay.this, MusicDoctorService.class)); 

} 

public void onResume() { 
    super.onResume(); 
    startService(new Intent(OpenerPlay.this, MusicDoctorService.class)); 

} 

public void onRestart() { 
    super.onRestart(); 
    startService(new Intent(OpenerPlay.this, MusicDoctorService.class)); 

} 

Моя цель состояла в том, чтобы остановить или возобновить работу, которая играет музыку, когда я закрыть приложение или выключить экран. Но он также останавливается, когда я переключаюсь на другую активность. Должен ли я что-то изменить в коде моего сервиса? Наконец: я хотел бы, чтобы моя служба воспроизводила музыку, чтобы остановить экран, выключить или закрыть приложение, но не во время переключения активности.

Услуги:

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() { 

} 

}

ответ

0

Попробуйте это в OnDestroy метод Activity в ...

@Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     if(isMyServiceRunning(MyService.class)) 
     { 
      stopService(new Intent(this, MyService.class)); 
     } 
    } 


private boolean isMyServiceRunning(Class<?> serviceClass) { 
     ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
     for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
      if (serviceClass.getName().equals(service.service.getClassName())) { 
       return true; 
      } 
     } 
     return false; 
    } 

Вот когда активность завершится, вы должны остановить службу ..

Также в вашем сервисе вы должны освободить mediaplayer

@Override 
protected void onPause() { 
    super.onPause(); 
    if (mediaPlayer != null){ 
     mediaPlayser.stop(); 
     if (isFinishing()){ 
     mediaPlayer.stop(); 
     mediaPlayer.release(); 
     } 
    } 
}