我有一个音频应用程序,当AVAudioSessionRouteChangeNotification
出现时,该应用程序配置AV并测试耳机使用等。
然而,Siri激活AVAudioSessionRouteChangeNotification
,但由于AV配置,Siri无法被用户使用(麦克风似乎不适合她,似乎。)
有没有办法确定Siri是否是导致AVAudioSessionRouteChangeNotification
的原因,因此我不会调用该方法来配置AV(如果它是Siri),从而让用户使用Siri的?
答案 0 :(得分:2)
你是对的,耳机插入/拔出和Siri激活都会触发AVAudioSessionRouteChangeNotification
,但请注意与通知关联的AVAudioSessionRouteChangeReasonKey
当插入耳机时,原因是AVAudioSessionRouteChangeReasonNewDeviceAvailable
当拔出耳机时,原因是AVAudioSessionRouteChangeReasonOldDeviceUnavailable
当Siri被激活时,原因是AVAudioSessionRouteChangeReasonCategoryChange
答案 1 :(得分:0)
如果要检查Siri的开始或结束,请在AVAudioSessionRouteChangeNotification事件中使用以下代码:
AVAudioSessionRouteChangeReason routeChangeReason = [note.userInfo[AVAudioSessionRouteChangeReasonKey] integerValue];
AVAudioSessionRouteDescription* description = note.userInfo[AVAudioSessionRouteChangePreviousRouteKey];
BOOL isSiriStart = (routeChangeReason == AVAudioSessionRouteChangeReasonCategoryChange && description.inputs == nil);
BOOL isSiriFinish = (routeChangeReason == AVAudioSessionRouteChangeReasonCategoryChange && description.inputs != nil);