我实现了audioSessionGotInterrupted方法,以便在音频会话中断时被通知.这是我目前的代码:
@objc private func audioSessionGotInterrupted(note: NSNotification) { guard let userInfo = note.userInfo,let typeValue = userInfo[AVAudioSessionInterruptionTypeKey] as? UInt,let type = AVAudioSessionInterruptionType(rawValue: typeValue) else { return } if type == .began { print("interrupted") // Interruption began,take appropriate actions player.pause() saveCurrentPlayerposition() } else if type == .ended { if let optionsValue = userInfo[AVAudioSessionInterruptionoptionKey] as? UInt { let options = AVAudioSessionInterruptionoptions(rawValue: optionsValue) if options == .shouldResume { print("restored") // Interruption Ended - playback should resume setupPlayer() player.play() } else { // Interruption Ended - playback should NOT resume // just keep the player paused } } }}
现在我做以下事情:
>播放一些音频
>锁定手机
>暂停音频
>等待几秒钟,直到我在XCode调试器中看到该应用程序已在后台停止
>我在锁屏上打了一场比赛
我的commandCenter play()方法按预期调用.但是,使用type == .began调用audioSessionGotInterrupted方法.
怎么可能?我希望看到没有这种通知或至少看到
我使用iOS 10 beta 8.
解决方法 检查一下https://developer.apple.com/documentation/avfoundation/avaudiosession/1616596-interruptionnotification
从iOS 10开始,系统将停用大多数应用的音频会话,以响应暂停的应用进程.当应用程序再次开始运行时,它将收到一个中断通知,表明其音频会话已被系统停用.此通知必须及时延迟,因为它只能在应用再次运行后才能发送.如果您的应用程序的音频会话因此而暂停,则userInfo字典将包含值为true的AVAudioSessionInterruptionWasSuspendedKey键.
如果您的音频会话配置为不可混合(播放,playAndRecord,soloAmbIEnt和multiRoute类别的默认行为),如果您在进入后台时没有主动使用音频,建议您停用音频会话.这样做可以避免系统停用音频会话(并收到这个有点令人困惑的通知).
if let reason = AVAudioSessionInterruptionType(rawValue: reasonType as! UInt) { switch reason { case .began: var shouldPause = true if #available(iOS 10.3,*) { if let _ = notification.userInfo?[AVAudioSessionInterruptionWasSuspendedKey] { shouldPause = false } } if shouldPause { self.pause() } break case .ended: break }}总结
以上是内存溢出为你收集整理的从后台唤醒时AVPlayer audioSessionGotInterrupted通知全部内容,希望文章能够帮你解决从后台唤醒时AVPlayer audioSessionGotInterrupted通知所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)