iphone: playing audio playlist in the background?
Asked Answered
E

1

6

I'm trying to play sequence of audio files in the background using AVAudioPlayer. When the app is not in the background it plays well, but when the app goes to the background it won't play the second song.

Here is my code:

-(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]];

}

I debugged the app and it seems that when it's about to play the second song [mainController.audioPlayer play] returns NO, which means it can't play. So what do you think?


UPDATE

After some testing it seems that it does continue to play properly only if the device locks, but if the user presses the home button and the app goes to the background the problem still remains

Ed answered 21/7, 2010 at 8:48 Comment(5)
A little help for you: #3162135Decoct
Yeah I looked at that thread before, and part of my code is from there. for some reason the AVAudioPlayer refuses to play a new track when he is in the background.Ed
@IWasRobbed - It seems you had a similar issue. can you post some of your code? ThanksEd
I have been tied up with other things so I haven't been able to work on that project. The original source of that information posted this discussion as well devforums.apple.com/message/239381 ..Maybe it will help you more.Decoct
Yeah I looked at that but still can't solve the problemEd
E
9

THE SOLUTION

Just add [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; and some other tweaks. It's all here

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

Ed answered 25/7, 2010 at 20:39 Comment(2)
absolute lifesaver! i've been googling for this for a day and a half :)Trevor
link to explanation is brokenEpicycle

© 2022 - 2024 — McMap. All rights reserved.