今日 iOS 8 小部件中的音乐播放器控件

Posted

技术标签:

【中文标题】今日 iOS 8 小部件中的音乐播放器控件【英文标题】:Music player controls in iOS 8 today widget 【发布时间】:2014-10-13 11:07:48 【问题描述】:

我正在尝试实现一个示例 ios 8 Today 小部件,其中包含一个音乐播放器控件,该应用是一个启用了背景音频的基本音乐应用。

我环顾四周寻找通知包含应用程序的方法,但我没有找到任何方法!。

场景基本上是,应用程序处于暂停状态并在选定的歌曲/专辑上(它可能会在某首歌曲上暂停),然后我需要使用播放/停止/下一步按钮等在小部件上显示名称.

基于 Apple 的文档,以及描述使用场景的文档: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensibilityPG.pdf

它提到扩展不应该处理任何长时间的执行,并特别指出音频播放是不受支持的情况,因为它需要在扩展之外运行。但它没有提到在这种情况下触发包含应用程序的方法,它只是提到了 NSURLSession 技术,它可以处理大文件下载并在后台唤醒应用程序以调用 handleEventsForBackgroundUrlSession,以及包含应用程序和扩展程序的应用程序组共享功能访问共享数据容器。唯一可行的解​​决方案是 openURL 解决方案,它将强制将整个应用程序置于前台。

我确实为我的演示设置了一个 App-Group,并尝试使用自定义通知调用 NSNotificationCenter,分别在包含应用程序和扩展程序上调用 addObserver/postNotificationName,但它根本不起作用。我什至尝试更改 App-Group 的 NSUserDefaults ,但这在包含应用程序的背景时也不会触发。

这里有一些可能相关的问题,但我没有在其中找到答案: (Sharing data between app extension and conainer app) --- (NSUserDefaultsDidChangeNotification not sent when app resumes from the background) --- (Set notifications from Today Extension Widget)

我认为这可能不可行,但我刚刚发现了一个名为 TapTunes 的应用,它最近添加了一个具有类似功能的小部件,包括扩展本身中的所有控件。

谢谢。

【问题讨论】:

【参考方案1】:

问题是,您想播放一些自定义音频,还是只播放 iOS 音乐播放器中的曲目?

在我看来,TapTunes 使用的是标准音乐播放器。我认为这可以通过使用 MPMusicPlayerController (https://developer.apple.com/library/ios/documentation/MediaPlayer/Reference/MPMusicPlayerController_ClassReference/) 来完成

如果你想播放自定义音频,通常你会启用一个特殊的音频背景模式(见这里:http://www.raywenderlich.com/29948/backgrounding-for-ios),并有一个不断调用的回调来输入新的音频数据,例如来自互联网。也许您可以只观察回调中的 NSUserDefault 键,它会告诉您当前的操作(“下一曲目”、“上一曲目”等)。我想这些可能会导致一些延迟,直到实际执行操作。

无论如何,如果小部件被 App Store 拒绝,请不要感到惊讶,因为他们最近似乎对不遵循通常的“显示一些快速信息”概念的小部件非常小心。 TapTunes 获得批准并不意味着您的应用也将获得批准。

【讨论】:

以上是关于今日 iOS 8 小部件中的音乐播放器控件的主要内容,如果未能解决你的问题,请参考以下文章

当运行音乐播放器的服务实际开始播放时更新小部件的 Textview

Flutter 小部件显示在所有屏幕上

iOS开发拓展篇—音频处理(音乐播放器4)

微信小程序 初学——音乐播放器

Android 小部件+服务

ios16音乐播放器变小了