2010-07-21 175 views
6

我想用AVAudioPlayer在後臺播放音頻文件的序列。當應用程序不在背景中時,播放效果很好,但當應用程序轉到背景時,它不會播放第二首歌曲。iphone:在後臺播放音頻播放列表?

這裏是我的代碼:

-(void)playAudio:(NSString *)path{ 
    NSURL *url = [NSURL fileURLWithPath:path]; 

    NSError *error; 
    AVAudioPlayer *ap = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
    [[AVAudioSession sharedInstance] setActive: YES error: nil]; 
    ap.delegate = self; 

    mainController.audioPlayer = ap; 
    [ap release]; 


    if (mainController.audioPlayer == nil) 
     NSLog([error description]); 
    else{ 


     UIBackgroundTaskIdentifier newTaskId = UIBackgroundTaskInvalid; 

     [mainController.audioPlayer prepareToPlay]; 

     if([mainController.audioPlayer play]){ 

      newTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; 

     } 

     if (newTaskId != UIBackgroundTaskInvalid && bgTaskId != UIBackgroundTaskInvalid) 
      [[UIApplication sharedApplication] endBackgroundTask: bgTaskId]; 

     bgTaskId = newTaskId; 
    } 

} 

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag{ 
    NSLog(@"finished now next..."); 
    [self playAudio:[self getNextAudio]]; 

} 

我調試的應用程序,它似乎是當它即將播放的第二首歌[mainController.audioPlayer播放]返回NO,這意味着它不能播放。 那你覺得呢?


UPDATE

一些測試後,它似乎並繼續正常播放只有當設備鎖,但如果用戶按下home鍵和應用程序轉到後臺問題仍然存在

+0

一點幫助你:http://stackoverflow.com/questions/3161635/entering-background-on-ios4-to-play-audio/3161899#3161899 – iwasrobbed 2010-07-21 13:14:58

+0

是的,我看了在那個線程之前,我的代碼的一部分是從那裏。出於某種原因,AVAudioPlayer拒絕在背景中播放新曲目。 – Alex1987 2010-07-21 17:11:25

+0

@IWasRobbed - 看起來你有類似的問題。你可以發佈一些你的代碼嗎?謝謝 – Alex1987 2010-07-21 20:41:21

回答

9

解決方案

只需添加[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];和其他一些調整。這一切都在這裏

https://devforums.apple.com/message/264397

+0

絕對救生員!我一直在這個谷歌搜索了一天半:) – kritzikratzi 2012-07-19 16:46:24

+0

鏈接到解釋是打破 – Shaybc 2016-04-14 20:27:20