我想在应用程序的背景中播放音乐:
public class BackgroundSoundService extends Service {
MediaPlayer mediaPlayer;
@Override
public void onCreate() {
super.onCreate();
mediaPlayer = MediaPlayer.create(this, R.raw.airport_lounge);
mediaPlayer.setLooping(true);
mediaPlayer.setVolume(100,100);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mediaPlayer.start();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
mediaPlayer.stop();
mediaPlayer.release();
}
@Override
public void onLowMemory() {
super.onLowMemory();
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
在我的主要活动中:
public static Intent musicIntent;
//Start music service
musicIntent = new Intent(this, BackgroundSoundService.class);
startService(musicIntent);
@Override
protected void onPause() {
super.onPause();
stopService(musicIntent);
}
@Override
protected void onResume() {
super.onResume();
startService(musicIntent);
}
我在onpause服务中停止它,因为如果用户切换应用程序而不关闭它,音乐将继续播放。问题是,当我们更改活动时,onpaused也会被调用,但我希望音乐在整个应用程序中继续播放。
所以在我的另一项活动中:
//start music
startService(MainActivity.musicIntent);
但是音乐重新开始,感觉不太好听。有什么解决办法吗?
2条答案
按热度按时间xfyts7mz1#
它取决于应用程序结构,例如,如果您构建一些基于tab或navigationdrawer的导航,您可能会构建一些片段,mainactivity将是您唯一的活动,因此只有在用户关闭应用程序时才会调用onpause方法。但这种情况不会随着应用程序的增长而持续(除非非常简单)。因此,另一种方法是在应用程序示例中启动服务,以防您使用它。
oalqel3c2#
你可以用
ActivityLifecycleCallbacks
在你的应用课上。在“如何检查活动是在前景还是在可见背景中?”中还提到了其他解决方案?。