我正在编写一个音频应用程序,它使用 iPod 音乐播放器播放 iPod 音乐库中的媒体项目。
现在我知道 iPod 在后台可以继续播放,但我还想在后台运行线程或计时器,其中选择器方法定期检查音乐播放器的状态,以便应用程序可以应用规则以在曲目之间应用延迟,并在后台自动将新的媒体收藏加载到播放器中。
这可能吗?
如果没有,是否还有其他方法可以实现此功能?
我正在编写一个音频应用程序,它使用 iPod 音乐播放器播放 iPod 音乐库中的媒体项目。
现在我知道 iPod 在后台可以继续播放,但我还想在后台运行线程或计时器,其中选择器方法定期检查音乐播放器的状态,以便应用程序可以应用规则以在曲目之间应用延迟,并在后台自动将新的媒体收藏加载到播放器中。
这可能吗?
如果没有,是否还有其他方法可以实现此功能?
诀窍是不要使用MPMusicPlayerController
,因为当您的应用程序进入后台时,它实际上放弃了对 iPod 应用程序的控制(您可以通过关闭您的应用程序并打开 iPod 应用程序来检查这一点)。
对于我目前正在开发的音乐应用程序,我使用AVAudioSession
and AVPlayer
( not AVAudioPlayer
) 推出了自己的音乐播放器。我在播放器上实现了一个队列,以及一个为队列提供数据的数据源(类似于 UITableViewDatasource
)。所有这一切都在后台运行时雄辩地工作,并且与 iPod 应用程序没有任何关联(作为额外的奖励,您的应用程序图标出现在多任务栏上的遥控器旁边)。
如果您开发了类似的东西,那么当您向数据源询问队列中的下一个项目时,您可以查询您的规则集并决定下一步该做什么。
当然。您可以在应用程序委托的applicationDidEnterBackground:
.
从模板:
如果您的应用程序支持后台执行,则在用户退出时调用此方法而不是 applicationWillTerminate:。
好吧,是的,现在,您不能使用NSTimer
,因为它们已失效。您可以启动一段代码以通过 GCD 运行以在后台运行,这将具有最大值。执行时间 10 分钟。