如何关闭应用程序或关闭屏幕时关闭服务(背景音乐),但是当我切换到其他活动时却不能关闭?
目前音乐播放正常,我会持续到屏幕关闭或关闭应用程序,但在切换到其他活动时也会关闭。这可能是由分配给每项活动的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));
}
答案 0 :(得分:0)
我可以通过两种方式建议
1)让它在onPause()中,创建一个标志/布尔值,默认情况下将设置为false,并且在每种情况下都为真,例如新活动启动,背压等等。所以如果调用onPause并且旗帜是假的,你可以停止音乐。
2)你已经有后台服务,你可以继续检查哪个活动在前台,如果是homeScreen,你可以停止音乐。
编辑: - 了解您的应用是否不在前台
答案 1 :(得分:0)
使用此代码。
删除此行:
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() {
}
}