活动在前台时如何在 Android 上播放音乐
Posted
技术标签:
【中文标题】活动在前台时如何在 Android 上播放音乐【英文标题】:How to play music on Android while activities are on foreground 【发布时间】:2021-04-10 17:14:15 【问题描述】:我想在我的应用程序的后台播放音乐:
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;
然后在我的 MainActivity 中:
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 服务中停止它,因为如果用户切换应用程序并且不关闭它,音乐将继续播放。问题是,当我们更改 Activity 时,也会调用 onPaused,但我希望音乐在整个应用程序中继续播放。
所以在我的另一个活动中:
//start music
startService(MainActivity.musicIntent);
但是音乐重新开始,听起来不太好。有什么解决办法吗?
【问题讨论】:
【参考方案1】:您可以在应用程序类中使用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
How to check if activity is in foreground or in visible background?中提到了其他解决方案。
【讨论】:
不幸的是,它对我没有帮助,因为每次调用活动 onStop、on resumed 等时都会调用这些方法......我想要的是当我们改变活动时,音乐不会受到影响,但是当我们将应用程序置于后台,因此音乐停止,因为当用户在另一个应用程序中时,音乐不能播放。 @LoicJackotin 我已经更新了我的答案,请检查一下【参考方案2】:这取决于应用程序结构,例如,如果您构建一些基于选项卡或 navigationDrawer 的导航,您可能会构建一些片段并且您的 MainActivity 将是您唯一的活动,因此只有当用户关闭您的应用。但是这种情况不会随着您的应用程序的增长而成立(除非它非常简单)。 因此,另一种方法是在您的应用程序实例中启动您的服务,以防您使用它。
【讨论】:
以上是关于活动在前台时如何在 Android 上播放音乐的主要内容,如果未能解决你的问题,请参考以下文章