在iOS锁屏界面播放音频时,如何隐藏或处理音量条?

3

我正在使用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回调中处理它。它还显示了音量条,我想要隐藏它或注册一个处理程序以便我可以对音量更改做出反应。是否可以注册回调以响应音量变化并执行除增加/减少音量之外的其他操作呢?如果不行,在后台播放音频时,是否可以从锁定屏幕中隐藏音量控制条?

你好,能告诉我你展示的那些代码应该放在哪里吗?我是不是需要在音频播放开始后调用这些代码?我无法显示任何锁屏控件,感谢你的帮助。 - MikeG
那么当应用程序进入后台时,init() 就会被调用了吗?但是在应用程序处于活动状态时播放音频之前,您已经设置了 AVAudioSession,对吧? - MikeG
init() 必须在应用程序进入后台之前调用。在我的情况下,我在其中一个视图控制器中创建了单例,但我相信您可以从应用程序委托中创建它,以确保提前设置音频会话并在应用程序进入后台之前配置命令。 - sigrem
好的,我明白了,但出于某种原因,我仍然在这方面挣扎,如果您有时间,可以看一下我的问题,我就是想不通为什么它不起作用。谢谢。 - MikeG
我没有足够的声望点数来在您的其他问题中添加评论,所以我在这里添加:是的,为了让锁屏工作,您需要使用iOS API来播放音频。不确定Spotify是如何做到的,但他们可能会使用第二个音频会话并行进行此操作,并使用控件来控制两者。您的后台处理程序(在我的情况下是单例)可以在进入后台时以0音量开始播放第二个音频,并在前台停止它。我自己还没有测试过,但这是一个可尝试的选项。 - sigrem
显示剩余3条评论
1个回答

0
关于我的问题的回调部分,似乎没有任何特定的远程命令处理从锁屏界面的音量变化。只需观察"outputVolume"(通过observeValueForKeyPath)就可以解决问题。 隐藏音量条仍然是一个问题,但对我来说不再是必要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接