如何告诉MPNowPlayingInfoCenter是否正在播放或暂停音乐?

我似乎无法让iOS在远程audio控件中显示正确的播放/暂停button。 我收到远程控制事件并设置nowPlayingInfo字典的所有值。

一切工作正常,我甚至看到锁屏上的封面照片。 除了暂停/播放button。 即使我的AVAudioPlayer正在播放,它总是看起来像暂停。 无论播放状态如何,它都会发送一个暂停事件。

如何通知iOS AVAudioPlayer已暂停,现在应该在遥控器button栏中显示播放button?

确保你正在设置MPNowPlayingInfoPropertyPlaybackRate属性。 0.0f表示暂停,1.0f表示正在播放。 当您更改这些值时,您还需要设置MPNowPlayingInfoPropertyElapsedPlaybackTime。

下面是代码示例,其中updateMetadata是一个将这些更改应用于MPNowPlayingInfoCenter.nowPlayingInfo字典的函数。 这会向中心表明玩家已经暂停。

 [self updateMetadata:[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithDouble:audioFile.player.currentTime], MPNowPlayingInfoPropertyElapsedPlaybackTime, [NSNumber numberWithFloat:0.0f], MPNowPlayingInfoPropertyPlaybackRate, nil]]; 

我今天遇到了这个问题:我发现我录制audio以及播放它的事实导致button显示暂停符号。

当我停止录制AVAudioRecorder ,暂停button变成了播放button。

这个问题通常只是iPhone模拟器。 只要使用AVAudioPlayer实例的play()函数,远程控制栏应该自动切换暂停/播放。 如果遇到这种情况,请尝试在设备上运行程序。

要切换button,您不需要设置playingInfo的任何playingInfo MPNowPlayingInfoCenter ,也不需要保存活动的AVAudioSession

下面是代码示例,其中up​​dateMetadata是一个将这些更改应用于MPNowPlayingInfoCenter.nowPlayingInfo字典的函数。 这会向中心表明玩家已经暂停

 self.updateMetadata(NSDictionary.dictionaryWithValuesForKeys(NSNumber(Double(audioFile.player.currentTime))),MPNowPlayingInfoPropertyElapsedPlaybackTime,NSNumber(numberWithFloat:0.0f),MPNowPlayingInfoPropertyPlaybackRate,nil)