Обработка AudioKit AVAudioSessionInterruption - PullRequest
0 голосов
/ 11 июня 2018

После получения телефонного звонка или просто телефонного звонка наше приложение AudioKit с фоновым воспроизведением замолкает навсегда, и я не уверен, как с этим справиться.Единственный способ возобновить вывод звука - убить и перезапустить приложение.Другие прерывания, такие как включение и использование Siri, работают без помех, и звук приложения приглушается во время события.

Обычно приложение может зарегистрироваться для получения уведомлений (например, NSNotification.Name.AVAudioSessionInterruption) для обнаружения прерывания AVAudioSession,но как получить объект AVSession, который обычно передается в уведомление?

NotificationCenter.default.addObserver(self, selector: #selector(AppDelegate.sessionInterrupted(_:)),
                                               name: NSNotification.Name.AVAudioSessionInterruption,
                                               object: MISSING_AK_AVAUDIOSESSION_REF)

Кроме того, если кто-то смог успешно реализовать звуковые уведомления о прерываниях, что произойдет с AudioKit?Он не предназначен для перезапуска или приостановки.Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 19 июля 2018

Это будет зависеть от вашего приложения, как вы справитесь с этим.По крайней мере, вы захотите выполнить Audiokit.stop (), а затем Audiokit.start (), когда прерывание закончится.

Вы захотите зарегистрироваться для уведомления с чем-то вроде этого:

NotificationCenter.default.addObserver(self,
                                           selector: #selector(handleInterruption),
                                           name: .AVAudioSessionInterruption,
                                           object: nil)

Затем обработайте это следующим образом:

@objc internal func handleInterruption(_ notification: Notification) {
    guard let info = notification.userInfo,
        let typeValue = info[AVAudioSessionInterruptionTypeKey] as? UInt,
        let type = AVAudioSessionInterruptionType(rawValue: typeValue) else {
            return
    }
    //...handle each type here
}
...