iOS: Siri недоступна, не возвращает AVAudioSessionInterruptionOptionShouldResume
У меня есть iOS-приложение, которое обрабатывает прерывания аудиосессии с помощью:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(AudioInterrupt:)
name:AVAudioSessionInterruptionNotification
object: NULL];
и в AudioInterrupt:
- (void)AudioInterrupt:(NSNotification*)notification
{
NSDictionary *interuptionDict = notification.userInfo;
// get the AVAudioSessionInterruptionTypeKey enum from the dictionary
NSInteger interuptionType = [[interuptionDict valueForKey:AVAudioSessionInterruptionTypeKey] integerValue];
NSNumber* seccondReason = [[notification userInfo] objectForKey:@"AVAudioSessionInterruptionOptionKey"] ;
// decide what to do based on interruption type here...
switch (interuptionType) {
case AVAudioSessionInterruptionTypeBegan:
[[[self pureAudioHandler] audioController] setActive: NO];
NSLog(@"Interruption started");
break;
case AVAudioSessionInterruptionTypeEnded:
NSLog(@"Interruption ended");
break;
}
switch ([seccondReason integerValue]) {
case AVAudioSessionInterruptionOptionShouldResume:
NSLog(@"Resume Audio");
[[[self pureAudioHandler] audioController] configurePlaybackWithSampleRate:44100 numberChannels:2 inputEnabled:NO mixingEnabled:YES];
[[[self pureAudioHandler] audioController] setActive: YES];
break;
default:
break;
}
}
Это прекрасно работает с сигналами тревоги и Siri. Однако, если у меня нет подключения к интернету, и я нажимаю кнопку "Домой", я получаю "Siri not available...". AVAudioSessionInterruptionTypeBegan запущен. Нажмите кнопку home дважды, чтобы вернуться в приложение, и ни AVAudioSessionInterruptionTypeEnded, ни AVAudioSessionInterruptionOptionShouldResume не будут запущены. Есть обходные пути?
iPad mini Retina с 7.0.3
1 ответ
Много экспериментов показали, что прерывания не запускаются все время, как следовало бы. Иногда пропускает InterruptTypeBegan при входе в Siri, и все это происходит довольно случайно в текущем тестовом примере (Unity3D & Kalimba(libpd)).
Вместо этого использовали applicationWillResignActive для уничтожения звука и applicationDidBecomeActive, чтобы запустить его снова, так как они работают 100% времени.
Интересным фактом является то, что при входе обратно из Siri (без Wi-Fi, поэтому появляется сообщение "Siri недоступен..."), через некоторое время он изменяет частоту дискретизации обратно на половину собственной частоты дискретизации машины (24000 на ipad mini).