我正在构建一个带有服务并在后台播放音乐的应用程序。当用户不在应用程序中时,音乐将静音;当用户返回应用程序时,音乐将被静音。我使用了onPause()
和onResume()
方法。
问题是-每次用户进入新活动时,音乐都会暂停一秒钟,然后继续播放,因为当前活动会暂停一秒钟。
另一个问题-对于活动的第一次运行,onResume()
和onCreate()
都可以正常工作,这使我的服务从onResume()
停止,甚至没有从onCreate()
创建(这将导致应用关闭)。
有没有办法使用onPause()
而没有意图部分(或另一种类似的方式?)
是否有一种方法可以在第一次运行时使用onCreate()
而不使用onResume()
?
protected void onCreate(Bundle savedInstanceState) {
counter++;
if (counter==1) {
alliesSPEditor.putBoolean("isAllies", true);
alliesSPEditor.commit();
startService(new Intent(this,MusicService.class));
}
@Override
protected void onPause() {
super.onPause();
MusicService.getMP().mute();
}
@Override
protected void onResume() {
super.onResume();
if (counter!=1) //because the counter is still 1, the app won't shut down this way but it will not unmute the music.
MusicService.getMP().unMute();
}
答案 0 :(得分:0)
onResume()
之后调用 onCreate()
请参见https://developer.android.com/guide/components/activities/activity-lifecycle
答案 1 :(得分:0)
我看到一些解决方法:
问题是-每次用户进入新活动时,音乐都会暂停一秒钟,然后继续播放,因为当前活动暂停了一秒钟
首先是您在处理程序中设置一个标志,以开始新的活动,然后 在您的onPause()方法中检查de标志的值,如果为false,则不进行任何操作使音乐静音。
public static boolean openOtherActivity = false;
@Override
protected void onPause() {
super.onPause();
if (!openOtherActivity) {
MusicService.getMP().mute();
}
}
如果您愿意,也可以使用首选项
要解决de onCreate()和onResume()问题,可以使用相同的逻辑 为启动的服务创建一个标志,并控制何时需要使用其他方法取消音乐静音
public static boolean isServiceCreated = false; // In your activity that start the service
protected void onCreate(Bundle savedInstanceState) {
counter++;
if (counter==1) {
alliesSPEditor.putBoolean("isAllies", true);
alliesSPEditor.commit();
startService(new Intent(this,MusicService.class));
isServiceCreated = true; // set the flag to true
}
}
OnResume() method you can check if the service is started an create your logic