Java 如何在Android上播放音乐,而活动则在前台
我想在我的应用程序的背景中播放音乐:Java 如何在Android上播放音乐,而活动则在前台,java,android,android-music-player,Java,Android,Android Music Player,我想在我的应用程序的背景中播放音乐: public class BackgroundSoundService extends Service { MediaPlayer mediaPlayer; @Override public void onCreate() { super.onCreate(); mediaPlayer = MediaPlayer.create(this, R.raw.airport_lounge);
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);
}
//start music
startService(MainActivity.musicIntent);
我在“暂停服务”中停止它,因为如果用户切换应用程序而不关闭它,音乐将继续播放。问题是,当我们更改活动时,onPaused也会被调用,但我希望音乐在整个应用程序中继续播放
因此,在我的另一项活动中:
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);
}
//start music
startService(MainActivity.musicIntent);
但是音乐重新开始,听起来不太好听。任何解决方案?这取决于应用程序结构,例如,如果您构建一些基于tab或navigationDrawer的导航,您可能会构建一些片段,并且MainActivity将是您唯一的活动,因此只有当用户关闭应用程序时才会调用onPause方法。但随着应用程序的增长,这种情况不会持续(除非它非常简单)。
因此,另一种方法是在应用程序实例中启动服务,以备您使用。这取决于应用程序结构,例如,如果您构建一些基于tab或navigationDrawer的导航,您可能会构建一些片段,MainActivity将是您唯一的活动,所以,只有当用户关闭应用程序时,才会调用onPause方法。但随着应用程序的增长,这种情况不会持续(除非它非常简单)。
因此,另一种方法是在应用程序实例中启动服务,以备使用。您可以在应用程序类中使用
ActivityLifecycleCallbacks
public class MusicApplication extends Application implements ActivityLifecycleCallbacks {
int activitiesOnTop = 0;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
@Override
public void onActivityResumed(Activity activity) {
// one of application activities is visible
activitiesOnTop ++;
}
@Override
public void onActivityStopped(Activity activity) {
activitiesOnTop --;
if(activitiesOnTop == 0){
// none of activities are on foreground
}
}
}
中提到了其他解决方案。您可以在应用程序类中使用
ActivityLifecycleCallbacks
public class MusicApplication extends Application implements ActivityLifecycleCallbacks {
int activitiesOnTop = 0;
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(this);
}
@Override
public void onActivityResumed(Activity activity) {
// one of application activities is visible
activitiesOnTop ++;
}
@Override
public void onActivityStopped(Activity activity) {
activitiesOnTop --;
if(activitiesOnTop == 0){
// none of activities are on foreground
}
}
}
还有其他解决方案,请参见。哦,是的。。。。我忘了。哦,是的。。。。我忘了这一点。不幸的是,这对我没有帮助,因为每次调用“在顶部”、“在恢复中”等活动时都会调用这些方法。。。我想要的是,当我们更改活动时,音乐不会受到影响,但当我们将应用程序置于后台时,音乐会停止,因为当用户在另一个应用程序中时,音乐不能播放。@LoicJackotin我已经更新了我的答案,请检查一下谢谢!很不幸,这对我没有帮助,因为每次调用“在顶部”、“在恢复中”等活动时都会调用这些方法。。。我想要的是,当我们更改活动时,音乐不会受到影响,但当我们将应用程序置于后台时,音乐会停止,因为当用户在另一个应用程序中时,音乐不能播放。@LoicJackotin我已经更新了我的答案,请检查一下谢谢!它起作用了。