【问题标题】:Hide or handle volume bar on iOS lock screen when playing audio in background在后台播放音频时隐藏或处理 iOS 锁定屏幕上的音量条
【发布时间】:2017-01-05 17:32:39
【问题描述】:

我正在使用 MPRemoteCommandCenter 和 MPNowPlayingInfoCenter 来控制后台音频的播放。设置命令回调:

let commandCenter = MPRemoteCommandCenter.sharedCommandCenter()

commandCenter.pauseCommand.enabled = true
commandCenter.pauseCommand.addTarget(self, action: #selector(AudioPlayer.remoteCmdPause))

commandCenter.playCommand.enabled = true
commandCenter.playCommand.addTarget(self, action: #selector(AudioPlayer.remoteCmdplay))

以及更新音频数据:

let artWork = MPMediaItemArtwork(image: image)
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [
   MPMediaItemPropertyTitle: self.title,
   MPMediaItemPropertyArtwork: artWork,
   MPMediaItemPropertyPlaybackDuration: self.duration,
   //MPNowPlayingInfoPropertyElapsedPlaybackTime: 0
]

这显示了我可以在 remoteCmdPause 和 remoteCmdPlay 回调中处理的暂停/播放按钮。它还显示了我想要隐藏或注册处理程序的音量栏,以便我可以对音量变化做出反应。

是否可以为音量更改注册回调以执行(或除此之外)增加/减少音量之外的操作?
如果不是,是否可以在后台播放音频时从锁定屏幕中隐藏音量控制栏?

【问题讨论】:

  • 嗨,你能告诉我上面显示的行的确切位置吗?我必须在音频播放开始后拨打这些线路吗?我无法显示任何锁定屏幕控件,感谢您的帮助
  • 我有一个单例来处理后台状态。在其init() 中,我设置了 AVAudioSession。稍后我在单例上调用一个配置函数来启用命令和设置回调(上面的第一组行)。 nowPlayingInfo 的初始值也在配置期间设置(第二组行)。 nowPlayingInfo 之后可以根据需要定期更新。 IE。在音频播放开始之前设置音频会话并配置回调。
  • 那么当应用程序进入后台时,此时会调用init() 吗?但是在应用处于活动状态时播放音频之前,您不是已经设置了 AVAudioSession 吗?
  • 必须在应用进入后台之前调用init()。在我的情况下,我在我的一个视图控制器中创建了单例,但我相信您可以从应用程序委托创建它,以确保提前设置音频会话并在应用程序进入后台之前配置命令。
  • 好的,我明白了,但由于某种原因,我仍在为此苦苦挣扎,如果您有时间可以看看my question here,我只是不明白为什么这不起作用。谢谢

标签: ios swift


【解决方案1】:

至于我的问题的回调部分,似乎没有任何特定的远程命令来处理锁定屏幕的音量变化。只需观察“outputVolume”(通过 observeValueForKeyPath)就可以了。
隐藏音量条仍然是一个问题,但不再需要(至少对我而言)。

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多