You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 04:43:19