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

设置AVAudioSession playback类别的App中断其他App音频的解决方法

解决方案

问题出在你启动应用时就直接激活了playback类别的音频会话——playback类别默认会抢占系统音频焦点,所以会直接中断其他正在播放的应用音频。要实现「后台播放自身音频 + 不播放时不干扰其他应用」,核心是按需激活/停用音频会话,而不是启动就抢占。

具体调整步骤:

  1. 移除启动时的音频会话激活逻辑
    删掉AppDelegate或SceneDelegate中启动阶段设置并激活音频会话的代码,不要在应用启动时就抢占音频焦点。

  2. 仅在播放音频时激活会话
    在你准备开始播放电台音频的方法中,再设置并激活音频会话:

    func startRadioPlayback() {
        do {
            // 保持你需要的类别和选项,.duckOthers会让其他音频降低音量而非完全中断
            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.duckOthers, .allowBluetooth])
            try AVAudioSession.sharedInstance().setActive(true)
            // 这里执行音频播放的逻辑(比如启动AVPlayer或AVAudioPlayer)
        } catch {
            print("音频会话配置失败: \(error.localizedDescription)")
        }
    }
    
  3. 停止播放时释放音频会话
    当电台停止播放(或暂停超过一定时间)时,停用音频会话,让其他应用可以恢复音频播放:

    func stopRadioPlayback() {
        // 先停止音频播放的逻辑(比如暂停/停止AVPlayer)
        do {
            // .notifyOthersOnDeactivation会通知其他应用恢复音频
            try AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
        } catch {
            print("停用音频会话失败: \(error.localizedDescription)")
        }
    }
    

额外注意:

  • 确保你的Info.plist中已经添加了UIBackgroundModes并包含audio项(这是后台播放的必要配置,你应该已经设置了,但可以确认一下)。
  • 如果是短暂暂停电台播放(比如暂停几十秒),可以选择不立即停用会话;但如果是长时间暂停或退出播放界面,建议释放会话以避免占用音频焦点。

内容的提问来源于stack exchange,提问作者Utku Dalmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:39:19