iOS - 重置命令中心/远程播放器

Posted

技术标签:

【中文标题】iOS - 重置命令中心/远程播放器【英文标题】:iOS - Reset the command center / remote player 【发布时间】:2016-08-11 12:10:33 【问题描述】:

我在我的应用中使用了不同类型的播放器。我对所有这些都有某种控制,但其中一个我根本没有。

特别是当我从 UIWebView 播放嵌入视频时。

我的问题是,该应用程序需要在后台播放音频,这可以正常工作。请注意,视频的音频不需要在后台播放。但这意味着我需要使用遥控器(命令中心和锁定屏幕命令)。

我的问题如下:

播放嵌入的视频后,遥控器仍然控制该视频,即使它已被关闭。当我按下“播放”时,它会播放我的收音机和嵌入的视频。

如何“清空”指挥中心的记忆?

我有足够的信息知道何时应用解决方案,但我不知道解决方案是什么。

解决方案可能包括在播放嵌入视频时或直到播放我的收音机之前完全无法使用指挥中心。解决方案可以包括指挥中心的某种“硬重置”。

实际上,任何解决方案都是受欢迎的。

【问题讨论】:

【参考方案1】:

这个问题有点老了,但我刚刚解决了这个问题,觉得这可以帮助别人。阻止我重置命令中心的原因是我添加了在视图控制器生命周期实例之后持续存在的目标操作。

这是我的代码的样子。

在视图控制器上:

var commandPlay: Any?
var commandPause: Any?

添加目标时:

commandPlay = commandCenter.playCommand.addTarget event in
        self.startButtonTapped(self.startButton)
        MPNowPlayingInfoCenter.default().nowPlayingInfo?[MPNowPlayingInfoPropertyPlaybackRate] = 1.0
        return .success
    

commandPause = commandCenter.pauseCommand.addTarget event in
        self.startButtonTapped(self.startButton)
        MPNowPlayingInfoCenter.default().nowPlayingInfo?[MPNowPlayingInfoPropertyPlaybackRate] = 0.0
        return .success
    

在解雇时删除目标(重要部分):

commandCenter.playCommand.removeTarget(commandPlay)
commandCenter.pauseCommand.removeTarget(commandPause)

【讨论】:

感谢您发布此信息。这对我有用。诀窍是将上面提到的变量声明为 Swift 5 中的 @State 变量。我必须修改我的播放/暂停代码以添加 commandPlay/commandPause 函数。不要忘记在 atDisappear() 函数中定义 commandCenter。我对您的代码进行了一些编辑。干得好。 没关系 - 它表示建议的编辑队列已满,因此我无法编辑您的问题。不要忘记这一行:let commandCenter = MPRemoteCommandCenter.shared();。您还需要停止接收远程事件:UIApplication.shared.endReceivingRemoteControlEvents()。

以上是关于iOS - 重置命令中心/远程播放器的主要内容,如果未能解决你的问题,请参考以下文章

更新 MPRemoteCommandCenter 播放/暂停按钮

指挥中心事件,仅响应无线耳机播放/暂停

当用户尝试全屏播放时,MPMoviePlayerController 停止并重置电影 [iOS]

iOS在通知中心隐藏声音选项

iOS:从通知扩展播放远程音频文件

iOS- MPMoviePlayerController 无法从远程 URL 播放视频