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).

Другие вопросы по тегам