【发布时间】:2011-03-18 21:00:20
【问题描述】:
我正在尝试使用 AVAudioPlayer 在后台播放音频文件序列。当应用程序不在后台时,它播放得很好,但是当应用程序进入后台时,它不会播放第二首歌曲。
这是我的代码:
-(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 play]返回NO,这意味着它无法播放。 那你怎么看?
更新
经过一些测试,它似乎只有在设备锁定时才能继续正常播放,但如果用户按下主页按钮并且应用程序进入后台,问题仍然存在
【问题讨论】:
-
是的,我之前看过那个帖子,我的部分代码来自那里。由于某种原因,AVAudioPlayer 在后台拒绝播放新曲目。
-
@IWasRobbed - 您似乎遇到了类似的问题。你可以发布一些你的代码吗?谢谢
-
我一直忙于其他事情,所以我无法从事那个项目。该信息的原始来源也发布了此讨论devforums.apple.com/message/239381 ..也许它会帮助你更多。
-
是的,我看过,但仍然无法解决问题
标签: iphone audio ios4 avaudioplayer multitasking