iPhone:MPMusicPlayerController 停止 AVAudioPlayer

Posted

技术标签:

【中文标题】iPhone:MPMusicPlayerController 停止 AVAudioPlayer【英文标题】:iPhone: MPMusicPlayerController stops AVAudioPlayer 【发布时间】:2012-12-01 11:06:47 【问题描述】:

当用户锁定屏幕时,我正在使用 AVAudioPlayer 播放无声音乐,这样我的计时器就不会停止。 但是,当我用[MPMusicPlayerController applicationMusicPlayer] 播放 iPod 音乐时,AVAudioPlayer 停止,没有收到任何回电。 有什么方法可以让我在不停止AVAudioPlayer 播放的情况下开始[MPMusicPlayerController applicationMusicPlayer] 播放?

编辑: 谢谢大家,这是我正在开发的应用程序:

这是一个闹钟应用程序,这个应用程序允许用户在应用程序运行时锁定屏幕,当闹钟时间到时,应用程序可以播放 iPod 音乐来唤醒用户。本地通知不能使用 iPod 音乐作为警报声音,所以我必须在屏幕锁定时保持应用程序运行。

如果用户退出应用程序,它将使用本地通知作为警报,其声音仅限于捆绑中的文件。

我不能使用 UILocalNotification 作为计时器,因为当处于屏幕锁定状态时(在 UIApplicationStatusInactive 中),应用程序无法接收系统生成的本地通知。

【问题讨论】:

播放无声音频以保持时间运行并不是一个好的解决方案。你的计时器的目的是什么,可能有更好的方法来完成你想要一起实现的目标。 为什么要使用无声音乐来保持计时器继续运行?您可以通过使用应用程序的后台和前台通知来进行替代。当应用程序要进入后台时,请注意计时器的当前时间。当它要进入前台时,再次记录当前时间,并添加到现在为止的总时间间隔并设置计时器。 【参考方案1】:

Apple 已经构建了他们的后台系统,以真正限制此类事情的发生。本质上,除非需要,否则您无法让应用程序在后台运行。如果您解释您要完成的工作,也许可以找到更好的解决方案,但作为一种好的做法,切勿使用随机背景方法来做其他事情。我假设您可能正在使用微弱的音乐作为在主屏幕上显示自定义内容的一种方式,这不是一个好主意。

【讨论】:

【参考方案2】:

如果您播放无声音频,您的应用将被拒绝。

另外,根据苹果的文档 https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103,通知不能包含播放超过 30 秒的声音 (soundName)。

因此您将无法在商店中发布您的应用。

【讨论】:

谢谢,我知道那些政策,而且我知道我在做黑客,所以我正在寻找一些更好的方法来实现它。不过我也在找苹果的声明说“播放背景音频可能会被拒绝”,所以我可以向我的老板报告,你介意告诉你在哪里找到的吗? 这不是官方声明。有一个著名的公司叫tapbots 的著名博文:tapbots.com/blog/pastebot/pastebot-music-in-background。 Apple 拒绝了他们的应用。他们在博客上写道:“怀着激动的心情,我们上周向 Apple 提交了最终版本。一周过去了,我们终于收到了有关 Pastebot 的通知。被拒绝了。这不是我们所希望的,但老实说,这是意料之中的。我们是不允许在后台播放无声的音频片段。" 好吧,这里有点不同,我的应用程序不在后台运行,它只会在应用程序处于前台时播放一首无声歌曲,然后用户锁定屏幕。我们曾经在后台播放音频,也被拒绝了。在屏幕锁定时播放音频(处于非活动状态而不是后台状态)似乎没问题,我们已经在应用商店有一个使用这种黑客攻击的版本。 在这种情况下,使用 [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryAmbient error: nil];可能有帮助。 AVAudioSessionCategoryAmbient 支持按照developer.apple.com/library/ios/#documentation/Audio/Conceptual/…进行音频混音【参考方案3】:

我自己想通了。 不是调用[MPMusicPlayerController +applicationMusicPlayer]停止AVAudioPlayer,而是调用[MPMusicPlayerController -setShuffleMode:],我不知道为什么调用它会停止AVAudioPlayer,但这就是问题所在。 谢谢大家,我想我应该下次贴我的完整代码。

【讨论】:

以上是关于iPhone:MPMusicPlayerController 停止 AVAudioPlayer的主要内容,如果未能解决你的问题,请参考以下文章

在 iphone 5 和 iphone 6 中动态设置字体大小

Surface Pro4链接不上iphone手机的热点

iphone13和12外观的区别 iphone13和iphone12对比哪个好

为 iPhone 和 iPhone 4 开发之间有啥变化?

iPhone 5 与 iPhone 4 的图像命名

设置图像以适合 iPhone 5 和 iPhone 6