我正在尝试构建一个 iOS 应用程序(iOS > 5.0)。它应该在用户设置的计时器结束时播放音乐文件。这是我的设置,如果到目前为止完成:
- 我用avplayer
- 我已将 plist 中的背景模式设置为“应用程序播放音频”
在我的 appDelegate 我有:
NSError *sessionError = nil; [[AVAudioSession sharedInstance] setDelegate:self]; [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError];
在将要播放一首歌曲之前:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError]; [[AVAudioSession sharedInstance] setActive:YES error:&sessionError];
我在“playerItemDidPlayToEnd”上通知我的应用程序,停止播放器并告诉其他应用程序(如 music.app)再次激活
_avPlayer = nil; NSError *sessionError = nil; [[AVAudioSession sharedInstance] setActive:NO withFlags:AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation error:&sessionError];
这工作正常。您可以让您的音乐应用在后台播放。我的应用程序开始播放音乐应用程序逐渐消失的歌曲。我的歌曲已播放,如果完成,音乐应用程序将继续播放。但只要我的应用不在后台。
在后台我得到错误:
错误域 = NSOSStatusErrorDomain 代码 = 560161140 “操作无法完成。(OSStatus 错误 560161140。)”
是否有可能在后台播放(在自定义事件上)以及在 fe music.app 和我的后台应用程序之间切换这两种组合是不可能的?
这是我的播放器模型的代码:http: //pastie.org/4830995