Android平台下如何检测其他应用停止播放音乐?
Android检测其他应用停止播放音乐的方案
针对你的需求,这里提供几个可行的解决方法:
1. 正确配置音频焦点回调(API 26+推荐)
如果之前用的是旧版requestAudioFocus方法,可能无法完整接收焦点变更通知。建议升级到AudioFocusRequest并完善回调逻辑:
- 创建
AudioFocusRequest实例时,指定AUDIOFOCUS_GAIN作为焦点类型,同时绑定OnAudioFocusChangeListener - 当其他应用停止播放并释放音频焦点时,回调会收到
AUDIOFOCUS_GAIN事件,此时即可恢复游戏音乐 - 示例代码:
val audioFocusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN) .setOnAudioFocusChangeListener { focusChange -> when (focusChange) { AudioManager.AUDIOFOCUS_GAIN -> { // 其他应用释放焦点,恢复游戏音乐 resumeGameMusic() } AudioManager.AUDIOFOCUS_LOSS, AudioManager.AUDIOFOCUS_LOSS_TRANSIENT -> { // 失去焦点,暂停游戏音乐 pauseGameMusic() } } } .build() audioManager.requestAudioFocus(audioFocusRequest)
2. 结合自身音乐状态修正isMusicActive()判断
isMusicActive()会包含当前应用的音频状态,你可以在代码中维护自己的游戏音乐播放状态(比如一个isGameMusicPlaying布尔变量),调整判断逻辑:
val isOtherAppPlaying = audioManager.isMusicActive() && !isGameMusicPlaying
这样就能准确判断是否有其他应用在播放音乐,当isOtherAppPlaying从true变为false时,即可恢复游戏音乐。
3. 监听活跃媒体会话(API 21+)
通过MediaSessionManager获取系统中活跃的媒体会话,排除自身应用的会话后判断是否有其他应用在播放:
- 先在AndroidManifest中添加权限:
android.permission.MEDIA_CONTENT_CONTROL - 示例代码:
val mediaSessionManager = getSystemService(MEDIA_SESSION_SERVICE) as MediaSessionManager val activeSessions = mediaSessionManager.getActiveSessions(componentName) val hasOtherActiveSession = activeSessions.any { session -> session.controller.packageName != packageName && session.controller.playbackState?.state == PlaybackState.STATE_PLAYING }
你可以定时检查或注册回调监听会话状态变化,当hasOtherActiveSession变为false时恢复音乐。
内容的提问来源于stack exchange,提问作者Bungles
相关产品推荐
相关产品推荐

