为什么不同的蓝牙音箱在AVAudioSession(IOS)方面表现不同

时间:2018-04-09 10:02:20

标签: ios audio bluetooth avaudiosession speaker

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

我试图在应用发布之前解决所有“边缘情况”......无论多么轻微。

您可能知道......播放音频的应用需要告诉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。播放歌曲/音频和背景。

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

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

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

  • 如果你只是使用手机扬声器(不是外接蓝牙扬声器),一切正常,正如预期的那样。

  • 如果您正在使用ION Tailgater iPA77蓝牙音箱,一切正常。

  • 但是,如果您正在使用MTX MUDHSB-B蓝牙扬声器,那么当您按下三个按钮中的任何一个按钮时都不会发生......直到您继续等待和/或按下按钮看似任意的时间(约30秒)...然后声音将开始通过并且表现正常。

一台蓝牙扬声器的行为与另一台蓝牙扬声器的行为有何不同(大概是AVAudioSession)?蓝牙是蓝牙,对吗?我猜不会。有人能说清楚这个吗?

感谢。

2 个答案:

答案 0 :(得分:1)

听起来像扬声器有问题......你是否尝试过与2个不属于你的应用相同的场景?例如Spotify和Apple Music?

答案 1 :(得分:0)

您需要清除AVAudioSessionCategoryOptionAVAudioSessionCategoryOptionMixWithOthers

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

  

如果清除此选项,则激活会话会中断其他会话   音频会话。如果设置了此选项,则会混合应用程序的音频   在后台应用程序中播放音频(例如音乐应用程序)。

根据您的代码,另一个选项是您在设置类别后没有激活音频会话:

audioSession.setActive(true)