我有一个播放音频的应用。
我试图在应用发布之前解决所有“边缘情况”......无论多么轻微。
您可能知道......播放音频的应用需要告诉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)?蓝牙是蓝牙,对吗?我猜不会。有人能说清楚这个吗?
感谢。
答案 0 :(得分:1)
听起来像扬声器有问题......你是否尝试过与2个不属于你的应用相同的场景?例如Spotify和Apple Music?
答案 1 :(得分:0)
您需要清除AVAudioSessionCategoryOption
至AVAudioSessionCategoryOptionMixWithOthers
如果您在documentation处查看,则会在底部看到:
如果清除此选项,则激活会话会中断其他会话 音频会话。如果设置了此选项,则会混合应用程序的音频 在后台应用程序中播放音频(例如音乐应用程序)。
根据您的代码,另一个选项是您在设置类别后没有激活音频会话:
audioSession.setActive(true)