为什么不同的蓝牙扬声器对 AVAudioSession 的行为会有所不同(IOS)

Why would different bluetooth speakers behave differently with respect to AVAudioSession (IOS)

我有一个播放音频的应用程序。

我正在尝试在应用发布之前处理所有 "edge cases" 问题.. 无论多么轻微。

如您所知...播放音频的应用程序需要告诉 IOS 系统它们打算如何运行。他们的音频是否会干扰其他应用程序?它们是否与其他应用程序混合使用?等等等等

因此,应用程序需要正确设置其 AVAudioSession 代码...我根据 Apple 的文档进行了设置:

import UIKit
import AVFoundation

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        // Override point for customization after application launch.

        let audioSession = AVAudioSession.sharedInstance()
        do {
            try audioSession.setCategory(AVAudioSessionCategoryPlayback)
        } catch {
            print("Setting category to AVAudioSessionCategoryPlayback failed.")
        }

        do {
            try audioSession.setActive(true)
        } catch {

            print("Setting AudioSession active failed.")

        }
        // Other project setup
        return true
    }

}

设想以下测试:

1) 打开蓝牙并连接蓝牙音箱。

2) 加载一个在后台播放音频的知名应用,例如 Spotify。播放 song/audio 并作为背景。

3) 当来自 APP B 的音频仍在播放时,加载 APP A(我的应用程序)并按三个按钮中的任意一个。

所以...执行第 3 步后,会发生什么?

嗯,这取决于您使用的是什么...例如:

一个蓝牙扬声器与另一个蓝牙扬声器的行为有何不同(大概与 AVAudioSession 相关)?蓝牙就是蓝牙吧?我猜不会。任何人都可以阐明这一点吗?

谢谢。

您需要清除 AVAudioSessionCategoryOptionAVAudioSessionCategoryOptionMixWithOthers

如果您查看 documentation,在底部您会看到:

If this option is cleared, activating your session interrupts other audio sessions. If this option is set, your app's audio is mixed with audio playing in background apps (such as the Music app).

根据您的代码,另一种选择是您在设置类别后不激活音频会话:

audioSession.setActive(true)

听起来像是扬声器的问题...您是否尝试过使用 2 个不是您的应用程序的相同场景?例如 Spotify 和 Apple Music?