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

Posted

技术标签:

【中文标题】如何告诉 MPNowPlayingInfoCenter 音乐是不是正在播放或暂停?【英文标题】:How to tell the MPNowPlayingInfoCenter wether or not the music is playing or paused?如何告诉 MPNowPlayingInfoCenter 音乐是否正在播放或暂停? 【发布时间】:2013-09-13 09:38:40 【问题描述】:

我似乎无法让 ios 在远程音频控件中显示正确的播放/暂停按钮。我确实收到了远程控制事件并设置了nowPlayingInfo 字典的所有值。

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

如何通知 iOS AVAudioPlayer 已暂停,并且它现在应该在遥控器按钮栏中显示一个播放按钮?

【问题讨论】:

如果您发现了这一点,请发布您的解决方案。 您是否在播放状态更改(例如暂停)时更新 MPNowPlayingInfoCenter? 【参考方案1】:

确保您正在设置 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]];

【讨论】:

【参考方案2】:

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

当我停止AVAudioRecorder 录制时,暂停按钮变成了播放按钮。

【讨论】:

【参考方案3】:

很多时候,问题只是 iPhone 模拟器。一旦您使用AVAudioPlayer 实例的play() 功能,远程控制栏应该会自动切换暂停/播放。如果您遇到的问题没有发生,请尝试在设备上运行您的程序。

要切换按钮,您不需要设置MPNowPlayingInfoCenter 中的任何playingInfo,也不需要保持活动的AVAudioSession

【讨论】:

【参考方案4】:

这里是示例代码,其中 updateMetadata 是将这些更改应用到 MPNowPlayingInfoCenter.nowPlayingInfo 字典的函数。这将向中心指示播放器已暂停。在 swift 中

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

【讨论】:

以上是关于如何告诉 MPNowPlayingInfoCenter 音乐是不是正在播放或暂停?的主要内容,如果未能解决你的问题,请参考以下文章

如何告诉控制器调用啥视图?

如何告诉 MonetDB 数据在表中排序?

如何设置系统来告诉我 cron 作业是不是运行不正常?

如何告诉 MessageQueue.SendMessageConnection 如何“XMLize”要发送的对象?

CMAKE 如何告诉 makefile 链接库?

你如何让一个不和谐的机器人告诉 ping?