AVAudioPlayer后台任务不能在iOS 5.0.1设备上运行,但它可以在iOS 5 Simulator上运行

时间:2011-12-19 19:19:02

标签: ios cocoa avaudioplayer

我正在做一个播放歌曲的示例应用程序,即使应用程序进入后台,该歌曲仍然会播放。

在iOS 5 xcode模拟器中,当应用程序进入后台时它仍然播放该歌曲,但是当我在iOS 5.0.1 iPad2设备上运行时,app会在播放到后台时停止播放声音。 以下是播放歌曲和执行后台任务的代码。你在iOS 5.0.1中遇到过这种问题吗?或者我在代码中遗漏了什么?但我想知道它是如何在模拟器中工作的?

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSURL *url=[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"01-Track" ofType:@"mp3"]];
    NSError *error;
    audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error];
    if(error)
    {
        NSLog(@"Error in audio palyer: %@", [error localizedDescription]);
    }
    else
    {
        audioPlayer.delegate =self;
        [audioPlayer prepareToPlay];
        trackControl.maximumValue=[audioPlayer duration];
        trackControl.value=0.0;

        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
        [[AVAudioSession sharedInstance] setActive: YES error: nil];
    }
}
-(IBAction)playAudio:(id)sender
{
     UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid;
     if([audioPlayer play]){
      newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
}

谢谢!

1 个答案:

答案 0 :(得分:2)

要让音频继续在后台工作,您应该添加一个名为必需背景的键 info.plist中的模式,其值为应用播放音频。但除非绝对必要,否则苹果不会大力推广它。