iOS - 更新多任务栏中的媒体播放/暂停状态

Posted

技术标签:

【中文标题】iOS - 更新多任务栏中的媒体播放/暂停状态【英文标题】:iOS - updating the media play/pause state in the multitasking bar 【发布时间】:2013-04-24 18:15:59 【问题描述】:

我们有一个使用 AU 图 - CoreAudio API - 来播放音频的工作应用。图形始终在运行,各种源素材的播放/暂停状态在图形渲染回调函数中进行管理。 我们成功响应了 UIEventTypeRemoteControl 事件,并且我们使用 MPNowPlayingInfoCenter 成功地使用当前播放内容的元数据更新了锁屏。

缺少的一项是更新 ios 多任务栏中播放/暂停按钮的状态。它始终处于“暂停”(||) 模式,即使应用程序音频已经暂停。它永远不会切换到“播放”(>) 状态。

哪个 API 用于更新播放/暂停按钮状态?

【问题讨论】:

【参考方案1】:

我发现当使用 CoreAudio AU 图时,AUGraphStart() 会在 iOS 状态栏和 iOS 多任务栏中显示播放指示器,AUGraphStop() 会清除它们。

【讨论】:

使用 AVAudioPlayer 时出现同样的问题,但似乎没有办法让它正常工作。 @openfrog:你找到解决办法了吗?? 看到同样的问题。有什么解决办法吗?【参考方案2】:

更改 MPNowPlayingInfo 字典,设置新参数

MPNowPlayingInfoPropertyPlaybackRate to 1.0f to show pause button

MPNowPlayingInfoPropertyPlaybackRate to 0.0f to show play button

从播放按钮到暂停按钮

Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter");
if(playingInfoCenter)        
    NSMutableDictionary *songInfo = [NSMutableDictionary dictionaryWithDictionary:[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo];
    //[songInfo setObject:songTitle forKey:MPMediaItemPropertyTitle];
    //[songInfo setObject:songArtist forKey:MPMediaItemPropertyArtist];
    [songInfo setObject:[NSNumber numberWithFloat:1.0f] forKey:MPNowPlayingInfoPropertyPlaybackRate];
    [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = songInfo;            
 

从暂停按钮到播放按钮

Class playingInfoCenter = NSClassFromString(@"MPNowPlayingInfoCenter");
if(playingInfoCenter)          
    NSMutableDictionary *songInfo = [NSMutableDictionary dictionaryWithDictionary:[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo];
    //[songInfo setObject:songTitle forKey:MPMediaItemPropertyTitle];
    //[songInfo setObject:songArtist forKey:MPMediaItemPropertyArtist];
    [songInfo setObject:[NSNumber numberWithFloat:0.0f] forKey:MPNowPlayingInfoPropertyPlaybackRate];
    [MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = songInfo;

【讨论】:

我正在使用 AVPlayer,并得到同样的错误。我正在尝试您的解决方案,它可以在模拟器中运行,而不能在真实设备中运行。如果您知道任何其他解决方案,请帮助我解决这个问题。提前致谢。 这个答案通常是正确的,但不是关于这个问题。问题在于核心音频 API 无法与 MPNowPlayingInfoCenter 一起正常工作。

以上是关于iOS - 更新多任务栏中的媒体播放/暂停状态的主要内容,如果未能解决你的问题,请参考以下文章

iOS后台运行任务

多任务处理后 AVAudioPlayer 继续播放

iOS多任务处理:当应用程序在托盘中时让流播放

如何分配 AVPlayer 播放/暂停按钮 iOS?

当 iOS 应用程序进入后台时,是不是会暂停冗长的任务?

java 文件下载,支持任务暂停,恢复,断点续传;任务状态查询;任务并发控制