播放/暂停下一个/上一个button在控制中心呈灰色

在我的应用程序中,播放由控制中心控制。 在AVPlayer中播放时(此时播放控件在控制中心工作正常),我正在使用其他stream式URL加载webview。

一旦stream再次完成,我开始从AVPlayer播放。 之后,播放控制在控制中心变灰。

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

会有什么问题?

我遇到了这个问题以及使用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 ,该项目根本不会出现在locking屏幕或指挥中心。

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

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

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

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

解决方法的“主旨”是在AdMob中的广告被抓取并播放之后,重置所有的sharedCommandCenter监听器和MPNowPlayingInfoCenter的信息词典。 解决方法是重置所有的命令的方式不是很好,但这是我想出的。 也许有人有更好的方法?

这种方法也可能有助于OP。 在不同用途之间重置事物可能是一个解决scheme。

最后我解决了这个问题,通过加载使用AVplayer的MP3url,而不是加载到UIWebview当前播放时间 ,可以从AVPlayer获取总时间 ,也可以使用滑块查找播放。