【问题标题】:MPNowPlayingInfoCenter remote controls respond incorrectly in iOS 10MPNowPlayingInfoCenter 遥控器在 iOS 10 中响应不正确
【发布时间】:2017-01-20 18:17:55
【问题描述】:

在 iOS 10 中,控制中心 UI 进行了重新设计,从那时起,播放/暂停控制按钮的响应不同。

不能暂停的内容不应在每次点击时更改控制中心中的播放/暂停按钮。

在iOS 10之前,它可能会检查MPNowPlayingInfoPropertyPlaybackRate,如果内容没有暂停,它不会改变遥控器。在 iOS 10 中,它每次都会立即更改,而忽略 MPNowPlayingInfoPropertyPlaybackRate。

【问题讨论】:

  • 你能澄清你的问题吗?你是说对于不能暂停的内容,点击暂停按钮会改变按钮状态但不会暂停内容?
  • 确实如此。但内容何时以及是否可以暂停并不重要。例如。如果我完全忽略 remoteControlReceivedWithEvent 回调,按钮现在无论如何都会改变。
  • 我强烈反对使用旧的UIEvent 委托并切换到MPRemoteCommandCenter。看看我的回答here对你有没有帮助。
  • 谢谢,您为我指明了正确的方向。如果您不介意,我赞成您的原始答案并至少在此处发布一个。
  • 没问题,很高兴您的问题得到了解决!

标签: ios objective-c swift ios10 mpnowplayinginfocenter


【解决方案1】:

不再推荐使用UIEvent 代理处理远程控制事件的方式来处理音频/视频事件。相反,MPRemoteCommandCenter 提供了一个基于选择器的界面来启用和禁用按钮和远程控制事件,以及处理这些事件的操作。

在不应暂停或恢复内容的情况下,您必须将每个命令的 enabled 属性显式设置为 NO AND 提供一个操作,即使它只是一个什么都不做的虚拟选择器,以便正确禁用控制中心中的按钮:

MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter];

commandCenter.playCommand.enabled = NO;
[commandCenter.playCommand addTarget:self action:@selector(playAudio)];

commandCenter.pauseCommand.enabled = NO;
[commandCenter.pauseCommand addTarget:self action:@selector(pauseAudio)];

我将通过使用 AVPlayer here 的示例进一步详细说明这一点。

【讨论】:

  • 但是即使使用 commandCenter 来定义要显示的按钮以及绑定到按钮的选择器,当 MPNowPlayingInfoPropertyPlaybackRate 更改时,commandCenter-buttons 仍然不会更新。例如。 MPNowPlayingInfoPropertyPlaybackRate = 0 导致在 iOS 7-9 上暂停播放(以及锁屏上的“播放”图标);但是,iOS10 上没有。
猜你喜欢
  • 2023-03-24
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 2012-08-01
  • 2017-04-09
  • 2011-03-28
相关资源
最近更新 更多