从后台唤醒时AVPlayer audioSessionGotInterrupted通知

从后台唤醒时AVPlayer audioSessionGotInterrupted通知,第1张

概述我用AVAudioPlayer播放音频.我启用了后台音频,并且音频会话配置正确. 我实现了audioSessionGotInterrupted方法,以便在音频会话中断时被通知.这是我目前的代码: @objc private func audioSessionGotInterrupted(note: NSNotification) { guard let userInfo = note.u 我用AVAudioPlayer播放音频.我启用了后台音频,并且音频会话配置正确.

我实现了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通知所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1030760.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存