Обработка прерываний во время телефонного звонка – «начало» работает, но «конец» не

Приложение записывает аудио и должно прекратить запись звука, когда есть прерывание, например, телефонный звонок, а затем возобновить запись звука при завершении телефонного разговора.

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

С делегатами функции

См. Код ниже в моем ViewController.

func audioRecorderBeginInterruption(recorder: AVAudioRecorder){ print("* * * * * * * inside begin interruption")} func audioRecorderEndInterruption(recorder: AVAudioRecorder, withFlags flags: Int) { // THIS NEVER PRINTS, EVEN WHEN PHONE IS HUNG UP print("* * * * * * * inside end interruption") } 

С уведомлениями

Я также пытался обрабатывать прерывания с уведомлениями, но .Ended по-прежнему не обрабатывается, если я не получаю телефонный звонок, и я отклоняю вызов. Просмотреть код в приложении AppDelegate

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { let center = NSNotificationCenter.defaultCenter() center.addObserver(self, selector:"sessionInterrupted:", name:AVAudioSessionInterruptionNotification, object:AVAudioSession.sharedInstance()) //self.myViewController.audioSession) return true } func sessionInterrupted(notification: NSNotification){ if let typeValue = notification.userInfo?[AVAudioSessionInterruptionTypeKey] as? NSNumber{ if let type = AVAudioSessionInterruptionType(rawValue: typeValue.unsignedLongValue){ if type == .Began{ print("interruption: began") } else{ // THIS ALSO NEVER PRINTS print("interruption: ended") } } 

Связанные решения, которые не работали для меня

  1. Решение: добавление [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; который не работал
    • AVAudioRecorder не записывается в фоновом режиме после прерывания сеанса аудиосвязи
    • сеанс аудио iOS
  2. Решение: используйте MixWithOthers , который может работать для возобновления воспроизведения звука, но не работает в моем случае для возобновления записи аудио
    • Swift: как настроить аудио-сессию, которая изящно смешивается с другими (aka Pod)
    • Воспроизведение AVAudioPlayer не работает после входящего прерывания FaceTime

Текущая гипотеза

Моя нынешняя гипотеза заключается в том, что прерывание «Ended» происходит только для прерываний, например, когда вы получаете телефонный звонок, и вы отклоняете вызов, но не для того, если вы действительно забираете телефон, говорите немного, а затем повесьте трубку. Я предполагаю, что нет способа обнаружить последний случай, без использования телефона с взломом.

Расширение в более широком смысле здесь: уведомление об отключении IOS AVAudioSession не работает должным образом

Эта гипотеза, по-видимому, проверена в FAQ по DropVox :

Только одно приложение имеет контроль над аудио за раз. Если DropVox записывает, а другое приложение получает контроль, это называется «прерыванием». Когда прерывание завершено, DropVox может возобновить запись, если он находится на переднем плане 7 , поэтому мы не рекомендуем использовать «Запись в фон ".

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

Это правильно?

One Solution collect form web for “Обработка прерываний во время телефонного звонка – «начало» работает, но «конец» не”

НЕ активная аудиозапись в applicationWillResignActive:/applicationDidBecomeActive: функция!

при достижении телефонного звонка система владеет аудиозаписью, в это время, если вы [[AVAudioSession sharedInstance] setActive:YES error:&error] функцию [[AVAudioSession sharedInstance] setActive:YES error:&error] в функции applicationWillResignActive:/applicationDidBecomeActive: ваше приложение будет владеть аудиосвязью (на самом деле это должно быть неактивное аудиозапись при телефонном звонке, но я не знаю, почему он возвращает true) и не получит прерывания.

  • Почему Xcode 6 сохраняет autocompleting true как TRUE из библиотеки Dynamic Link Editor?
  • Ошибка делегирования приложения из-за инициализации Firebase
  • Получить имя класса Swift в методе «класс func»
  • Каковы различия между наблюдаемыми и предметными в rxSwift
  • Кнопка Airplay не отображается в элементах управления проигрывателем с помощью AVPlayer
  • Как установить размер UICollectionViewCell в зависимости от динамического размера UIlabel в нем с помощью SWIFT программно?
  • После перехода на Xcode 7 размер приложения вырос с 9 МБ до 60 МБ, есть ли исправление?
  • Проверьте, существует ли изображение в Фото
  • Добавление текста в цикл в Swift
  • Alamofire, счетчик лимита счетчика сеанса
  • UITableView - отложенная визуализация cellForRowAtIndexPath
  • ошибка Не удалось получить токен APNS Ошибка домена = com.firebase.iid Код = 1001 "(null)"
  • Interesting Posts

    Можно ли отключить сеть в iOS Simulator?

    Сделать UIImage из MKMapView

    Как сделать гиперссылку на String и поделиться ею в Facebook

    Альтернативы использованию панели инструментов UINavigationController

    Ограничить панорамирование в основном участке

    Int to UInt (и наоборот) бит в Swift

    Возможно ли создать объект ALAsset из NSData или другого типа изображения (CFImageRef, CIImage, UIImage)?

    NSMutableArray подсчитывает вхождения объектов и затем перестраивает массив

    Кнопка MPPolumeView AirPlay не видима

    Сделать приложение iOS совместимым с IPV6

    отредактировать переменную native use для файла изображения

    Как получить доступ к компоненту ViewController из PageViewController

    tableView скрывается из-за gestureRecognizer, прежде чем он сможет выполнить didSelectRowAtIndexPath

    Уведомление об отправке ios с помощью firebase

    При использовании поэтапной версии Apple для приложения, какая версия предоставляется пользователям для загрузки в первый раз?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.