AVQueuePlayer
应用程序进入后台后启动时无法开始播放声音队列。
基本问题是:如何AVQueuePlayer
从后台新创建的实例开始声音?
它适用于类似导航的应用程序,需要在时机成熟时播放具有适当方向的组合声音。而且大多数时候该应用程序在后台运行......
详情如下...
当我从活动应用程序启动它时它播放得很好,即使在应用程序进入后台后也完成播放声音。
到目前为止我做了什么:
在AppDelegate
里面didFinishLaunchingWithOptions
我补充说:
NSError *sessionError = nil;
[[AVAudioSession sharedInstance] setDelegate:self];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&sessionError];
// Change the default output audio route
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);
应用程序启动后,我单击主页按钮,应用程序进入后台。
到时候执行此代码(应用程序仍在后台,但请注意,我已启用音频和 AirPlay 后台模式):
-(void)playTrainingFinishedSound
{
NSMutableArray *queue = [NSMutableArray array];
[queue addObject:[AVPlayerItem playerItemWithURL:[[NSBundle mainBundle] URLForResource:@"alertkoniectreningu" withExtension:@"m4a"]]];
[self initializeAudioPlayerWithQueue:queue];
[self.appDelegate.audioPlayer play];
}
-(void)initializeAudioPlayerWithQueue:(NSArray *)queue
{
self.appDelegate.audioPlayer = [[AVQueuePlayer alloc] initWithItems:queue];
self.appDelegate.audioPlayer.actionAtItemEnd = AVPlayerActionAtItemEndAdvance;
}
不幸的是,这段代码没有发出任何声音,这与应用程序处于前台时的情况相反。