【HarmonyOS NEXT】使用AVPlayer播放音乐,导致系统其它应用音乐播放暂停 - 播放音频焦点管理

📅 2026/7/19 15:45:08
【HarmonyOS NEXT】使用AVPlayer播放音乐,导致系统其它应用音乐播放暂停 - 播放音频焦点管理
HarmonyOS NEXT 的 AVPlayer 会打断其他应用播放根本原因在于系统默认的音频焦点策略是后来者优先你的应用启动播放时系统会先暂停其他应用的音频再将焦点交给你。解决方案的核心是根据你的业务场景选择合适的音频焦点策略。 方案一播放短音效用 SoundPool混音模式如果只是播放短促音效或提示音不建议用 AVPlayer最佳实践是使用SoundPool。它专为此类场景设计默认就不会打断其他应用的音频播放。关键在于创建 SoundPool 时将usage设为STREAM_USAGE_MUSIC等类型即可进入混音模式。typescriptimport { audio } from kit.AudioKit; import { media } from kit.MediaKit; // 创建SoundPool配置为混音模式不会打断其他音频 let audioRendererInfo: audio.AudioRendererInfo { usage: audio.StreamUsage.STREAM_USAGE_MUSIC, // 关键配置 rendererFlags: 1 }; let soundPool: media.SoundPool await media.createSoundPool(5, audioRendererInfo); // 加载资源并播放... 方案二播放音乐用 AudioSessionManager四种策略如果是正经播放音乐或长音频就需要通过AudioSessionManager主动声明你的“待客之道”。它有四种concurrencyMode可供选择模式效果适用场景CONCURRENCY_MIX_WITH_OTHERS(并发模式)与其他应用音频同时播放互不干扰。需要背景音和你的声音同时存在。CONCURRENCY_DUCK_OTHERS(降低音量模式)与其他应用音频同时播放但将其他应用音量降低。导航语音播报既要听清导航又不希望音乐中断。CONCURRENCY_PAUSE_OTHERS(暂停模式)暂停其他应用音频独占焦点。典型的音乐应用希望用户完全沉浸在你的音乐中。CONCURRENCY_DEFAULT(默认模式)使用系统默认策略与PAUSE_OTHERS效果类似。大多数通用场景不需要特殊定制。代码示例在 AVPlayer 准备播放前设置typescriptimport { audio } from kit.AudioKit; // 1. 获取 AudioSessionManager let audioManager audio.getAudioManager(); let sessionManager audioManager.getSessionManager(); // 2. 配置策略比如选择 混音模式 let strategy: audio.AudioSessionStrategy { concurrencyMode: audio.AudioConcurrencyMode.CONCURRENCY_MIX_WITH_OTHERS }; // 3. 在播放前激活音频会话策略生效 await sessionManager.activateAudioSession(strategy); // ... 然后执行 AVPlayer 的 play() 逻辑注意会话激活后若不手动关闭系统约1分钟后会自动释放。你可以在播放结束后主动调用deactivateAudioSession()来清理资源将控制权交还给系统。⚙️ AVPlayer 补充策略audioInterruptMode监听此外AVPlayer 本身也有audioInterruptMode属性和audioInterrupt事件让你能感知到“被其他应用打断了”这一事件并做出响应如暂停播放。typescript// 在 AVPlayer 的 prepared 状态回调中设置 avPlayer.audioInterruptMode audio.InterruptMode.INDEPENDENT_MODE; // 或 SHARED_MODE avPlayer.on(audioInterrupt, (info: audio.InterruptEvent) { // 根据 info.hintType 处理暂停、降低音量等 console.info(音频被中断类型 info.hintType); });INDEPENDENT_MODE模式可以更独立地管理音频焦点避免与系统的默认策略强耦合。 场景选型速查表你的场景推荐方案核心要点播放短音效(点击声、提示音等)方案一SoundPool创建时设置usage为STREAM_USAGE_MUSIC自动混音。播放音乐希望共存方案二AudioSessionManager设置concurrencyMode为CONCURRENCY_MIX_WITH_OTHERS。播放音乐希望不打扰方案二AudioSessionManager设置concurrencyMode为CONCURRENCY_PAUSE_OTHERS。播放导航音压低背景音方案二AudioSessionManager设置concurrencyMode为CONCURRENCY_DUCK_OTHERS。