2012-09-27 102 views
2

我正在尝试构建iOS应用程序(iOS> 5.0)。当由用户设置的定时器结束时,它应播放音乐文件。这里是我的设置,如果到目前为止做了什么:iOS中的背景音频

  • 我在plist中使用avplayer
  • 我设置背景模式为“应用程序播放音频”
  • 在我的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]; 
    

这工作得很好。你可以让你的音乐应用程序在后台播放。我的应用程序开始播放音乐应用程序消失的歌曲。我的歌被播放,如果它完成了音乐应用程序继续播放。但只要我的应用程序不在后台。

在后台我得到的错误:

Error Domain=NSOSStatusErrorDomain Code=560161140 "The operation couldn\u2019t be completed. (OSStatus error 560161140.)"

是否有可能的两个组合,在背景(自定义事件)播放和F.E.之间切换music.app和我的应用程序在后台是不可能的?

这里,我的播放器模型的代码:http://pastie.org/4830995

回答

-1

你已经注册您的应用程序在后台继续为音频应用程序运行?为此,请将UIBackgroundModes密钥添加到您的Info.plist文件中,并将其值设置为audio

+0

是的,正如上面提到的“我的plist中的背景模式设置为”应用程序播放音频“,但我也阅读了几个线程后,背景模式不再有任何影响,因为ios5了。 – mightym

+0

对不起,我不知道。 –

0

我认为你的问题可能与后台处理。您需要在应用程序委托上覆盖此功能。

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
__block UIBackgroundTaskIdentifier task = 0; 
task=[application beginBackgroundTaskWithExpirationHandler:^{ 
    NSLog(@"Expiration handler called %f",[application backgroundTimeRemaining]); 
    [application endBackgroundTask:task]; 
    task=UIBackgroundTaskInvalid; 
}]; 

} 

除非声音播放,否则您的应用程序将在6分钟后死亡。如果您的用户设置了超过6分钟的计时器,您可以做的就是每5.5分钟播放一次相当短的声音,让您的应用程序保持活跃状态​​并开始新的后台任务。你也必须考虑很多东西不会在后台执行。我做了一些有点类似于你正在做的事情。我所做的是创建NSObject的自定义子类,处理音乐播放和应用程序过期的东西。并且使它成为我的委托中的一个强大属性,因为很多函数和通知不会在后台运行在VC上。

虽然如果你只是想播放声音,这可能不是最好的方法。也许只是发送本地通知就可以了。

希望这有助于。

+0

Thx为您的答复。这是很好的知道,没有意识到这一点。但是我将测试计时器设置为20秒。问题已经出现在那里。它设置了计时器。关闭应用程序。20秒后出现错误。 – mightym

+0

嗯,你可以制作示例项目并发布链接? – stringCode

+0

这里是我的播放器模型的代码http://pastie.org/4830995 – mightym