AVAudioPlayer を使用してバックグラウンドでオーディオ ファイルのシーケンスを再生しようとしています。アプリがバックグラウンドにないときはうまく再生されますが、アプリがバックグラウンドになると 2 番目の曲が再生されません。
これが私のコードです:
-(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]];
}
アプリをデバッグしたところ、2 番目の曲を再生しようとしているときに [mainController.audioPlayer play] が NO を返し、再生できないようです。それで、あなたはどう思いますか?
アップデート
いくつかのテストの後、デバイスがロックされた場合にのみ適切に再生され続けるようですが、ユーザーがホームボタンを押してアプリがバックグラウンドに移行した場合、問題は依然として残ります