如何判断Siri在应用程序使用期间是否处于活动状态

时间:2015-03-09 01:27:05

标签: ios objective-c siri

我有一个音频应用程序,当AVAudioSessionRouteChangeNotification出现时,该应用程序配置AV并测试耳机使用等。

然而,Siri激活AVAudioSessionRouteChangeNotification,但由于AV配置,Siri无法被用户使用(麦克风似乎不适合她,似乎。)

有没有办法确定Siri是否是导致AVAudioSessionRouteChangeNotification的原因,因此我不会调用该方法来配置AV(如果它是Siri),从而让用户使用Siri的?

2 个答案:

答案 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);