Блокировка пароля AVAudioSession останавливает AVAudioRecorder на iOS8

У меня возникают непредвиденные проблемы, связанные с фоновой записью (особенно когда экран становится заблокированным паролем). В итоге мое приложение AVAudioRecorder, похоже, правильно записывает на переднем плане, в фоновом режиме (при переключении приложений) и когда экран выключен (но до активации блокировки доступа).

Если я откладываю блокировку паролем (Настройки> Код доступа> Требовать пароль> 4 часа. И т. Д.), то запись работает без проблем при переключении переднего плана / фона / приложения / выключения экрана. И т. Д., Но когда проходит -Блокировка кайф в записи становится коррумпированной.

Я в основном использую код AVAudioRecorder для записи звука и следую инструкциям, установив параметр 'UIBackgroundModes / audio' в app.plist, чтобы обеспечить фоновую запись, которая, похоже, работает в фоновом режиме (т.е. Появляется красная полоса записи), но происходит сбой, когда код доступа становится активным, т. Е. Пользователь нажимает кнопку питания и ему требуется ввести пароль для доступа к устройству.

Мой код настроен на обработку звуковых прерываний с помощью ‘AVAudioSessionInterruptionNotification’, а AVAudioSession настроен как ‘withOptions: AVAudioSessionCategoryOptionDuckOthers, чтобы минимизировать внешние события, влияющие на фоновую запись.

[Процедура тестирования]

  • Блокировка паролем (iPhone 5 / iOS8.1> Настройки> Пароль> Требовать пароль> Через 5 минут)

    1. [Success-CASE-1] «Начать запись» на 7 минут. Оставить экран включенным, а приложение активным / видимым (т.е. не работает в фоновом режиме после начала записи) >> Запись работает, и после нажатия «Остановить запись» звук сохраняется и может воспроизводиться назад.

    2. [Success-CASE-2] «Начать запись» на 7 минут. Оставить экран включенным и переключить приложения (т. Е. Работать в фоновом режиме с включенным экраном и красной полосой записи, отображаемой после начала записи) >> Запись работает и после нажатия «Остановить запись» звук сохраняется и может быть воспроизведен.

    3. [Failure-CASE] «Начать запись» на 7 минут Выключить экран (т.е. приложение работает в фоновом режиме с выключенным экраном устройства) >> Через 7 минут с выключенным экраном устройству требуется пароль, когда экран включен. Запись неожиданно останавливается, становится поврежденным, воспроизведение невозможно.

  • Блокировка паролем (iPhone 5 / iOS8.1> Настройки> Пароль> Требовать пароль> Через 15 минут)

    1. [Repeat-Failure-CASE with Adjusted Passlock] ‘Start Recording’ for 7mins Switch Screen Off (i.e. app is running in background with devices screen off) >> After 7mins with Screen-Off, device is switched on (no pass lock is needed this time). Recording is okay, works perfectly and can be played back.

Единственная разница между Failure-CASE и Repeat-Failure-CASE заключается в том, что пароль для блокировки экрана не требуется.

[Примечания]

  1. Протестировано с использованием XCode 6.1 на iPhone 4/5/6, iPad Mini 2 (iOS8.1) с той же проблемой.
  2. Код представляет собой стандартный код AVAudioRecorder с настройкой AVAudioSession, аналогичной: http://www.jacopretorius.net/2013/04/record-and-playback-audio-in-ios.html

..

Надеюсь, информация поможет, потребовалось много проб и ошибок, чтобы добраться до этого момента.

кто-нибудь еще сталкивался с этой проблемой? как это довольно странно.

Благодарность


person Aj.    schedule 11.11.2014    source источник


Ответы (1)


Ваш аудиофайл (в песочнице) может быть защищен iOS при блокировке пароля; Если экран заблокирован без установки пароля, все в порядке ;

Попробуйте следующее :

        NSDictionary *oldAttr = [[NSFileManager defaultManager]attributesOfItemAtPath:localFilePath error:nil];
        NSMutableDictionary *newAttr = nil;
        if (oldAttr){
            newAttr = [[NSMutableDictionary alloc]initWithDictionary:oldAttr];
        }else{
            newAttr = [[NSMutableDictionary alloc]init];
        }
        [newAttr setObject:NSFileProtectionNone forKey:NSFileProtectionKey];
        [[NSFileManager defaultManager] setAttributes:newAttr
                                         ofItemAtPath:localFilePath
                                                error:nil];

Или , установите защиту данных в Сертификате, чтобы закрыть。

person tigerose    schedule 15.03.2015
comment
Человек ты спас мне жизнь .... спасибо за это, долго искал причину этой проблемы! Apple, кажется, становится все хуже и хуже день ото дня, не было даже сообщения журнала, описывающего, в чем проблема! - person Nav; 19.09.2016