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

Ios 如何判断Siri在应用程序使用期间是否处于活动状态,ios,objective-c,siri,Ios,Objective C,Siri,我有一个音频应用程序,当AVAudioSessionRouteChangeNotification启动时,该应用程序会配置AV并测试耳机使用情况等 但是,Siri会激活AVAUDIOSSESSIONROUTECHANGETNOTITION,但由于AV配置的原因,用户无法使用Siri(麦克风似乎对她不起作用。) 有没有办法找出Siri是否是导致AVAudioSessionRouteChangeNotification的原因,这样我就不会调用该方法来配置AV(如果是Siri),从而允许用户使用Sir

我有一个音频应用程序,当
AVAudioSessionRouteChangeNotification
启动时,该应用程序会配置AV并测试耳机使用情况等

但是,Siri会激活
AVAUDIOSSESSIONROUTECHANGETNOTITION
,但由于AV配置的原因,用户无法使用Siri(麦克风似乎对她不起作用。)


有没有办法找出Siri是否是导致AVAudioSessionRouteChangeNotification的原因,这样我就不会调用该方法来配置AV(如果是Siri),从而允许用户使用Siri?

没错,耳机插拔和Siri激活都会触发AVAudioSessionRouteChangeNotification,但是,请注意与通知关联的
AVAudioSessionRouteChangeReasonKey

插入耳机时,原因是
AVAudioSessionRouteChangeReasonNewDeviceAvailable

当耳机拔出时,原因是
AVAudioSessionRouteChangeReasonOldDeviceUnavailable


激活Siri时,原因是AVAudioSessionRouteChangeReasonCategoryChange

,如果要检查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);