播放/暂停下一个/上一个按钮在控制中心显示为灰色

Posted

技术标签:

【中文标题】播放/暂停下一个/上一个按钮在控制中心显示为灰色【英文标题】:Play/Pause next/Prev buttons are greyed out in control center 【发布时间】:2016-01-05 22:24:21 【问题描述】:

在我的应用程序中,播放是从控制中心控制的。 当在 AVPlayer 中播放时(此时播放控件在控制中心工作正常),我正在加载一个带有其他流 URL 的 webview。

再次完成流式传输后,我将从 AVPlayer 开始播放。 在此之后,播放控件在控制中心显示为灰色。

我正在使用[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo 在控制中心启用播放控制。

会有什么问题?

【问题讨论】:

我遇到了同样的问题。使用视频呈现 Admob 插页式广告时,通常会出现此错误。在我的情况下,下一个和上一个按钮都消失了 如果你已经解决了你的问题,你应该接受其中一个答案。 @VietHung 查看我对潜在解决方案/解决方法的回答:AdMob @manroe:我使用了相同的解决方案。无论如何,谢谢你:D 【参考方案1】:

我在使用AVPlayer 实例时也遇到了这个问题。您可以使用MPRemoteCommandCenter 设置锁定屏幕和命令中心的控件。

MPRemoteCommandCenter *commandCenter = [MPRemoteCommandCenter sharedCommandCenter];

commandCenter.previousTrackCommand.enabled = YES;
[commandCenter.previousTrackCommand addTarget:self action:@selector(previousTapped:)];

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

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

commandCenter.nextTrackCommand.enabled = YES;
[commandCenter.nextTrackCommand addTarget:self action:@selector(nextTapped:)];

previousTapped:playAudiopauseAudionextTapped 都是我的视图控制器中的所有方法,它们调用各自的方法来控制我的 AVPlayer 实例。要启用操作,您必须将enabled 显式设置为YES提供带有targetselector 的命令。

如果您需要禁用特定操作,则必须将enabled 属性显式设置为NO除了添加目标。

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

如果您没有为命令设置enabled,则该项目将根本不会出现在锁定屏幕或命令中心。

此外,请记住将您的应用设置为后台播放(将 UIBackgroundModes audio 值添加到您的 Info.plist 文件中。),将播放器设置为活动状态,并检查错误:

NSError *setCategoryError;
NSError *setActiveError;
[[AVAudiosession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];
[[AVAudioSession sharedInstance] setActive:YES error:&setActiveError];

【讨论】:

【参考方案2】:

Google 将我带到这里是因为我在使用 AdMob 视频广告时遇到了指挥中心问题,并且对 OP 的评论引用了 AdMob。在这里发帖给其他也有这些问题的人。

无论出于何种原因,iOS 上的 AdMob 视频广告似乎都使用了MPRemoteCommandCenter。这可能会干扰您的应用程序对命令中心的使用。这是我想出的潜在解决方法:https://gist.github.com/ekilah/e74683291d3e7fafb947

解决方法的“要点”是在获取来自 AdMob 的广告并在其播放之后重置所有 sharedCommandCenters 侦听器和 MPNowPlayingInfoCenter 的信息字典。解决方法是重置所有命令的方式并不漂亮,但这就是我想出的。也许有人有更好的方法?

这种方法也可能对 OP 有所帮助。在不同用途之间重置东西可能是一种解决方案。

【讨论】:

【参考方案3】:

最后我通过使用 AVplayer 加载 mp3 url 而不是在 UIWebview 中加载它来解决这个问题。 当前播放时间,t总时间可以从AVPlayer中获取,也可以使用滑块搜索播放。

【讨论】:

以上是关于播放/暂停下一个/上一个按钮在控制中心显示为灰色的主要内容,如果未能解决你的问题,请参考以下文章

通知 ios 上的自定义音频播放器控件

如何使用索引直接从 raw/res 文件夹访问音频文件

更新 MPRemoteCommandCenter 播放/暂停按钮

使用委托从按钮传递信息以突出显示单元格

AVPlayer / Airplay 按钮

如何使用 audio_service 在 Android 上显示当前正在播放的音频?