我正在编写一个通过计时器定期播放声音的iPhone应用程序。该应用程序的第一个版本在最小化时播放音频,或者当屏幕变为空白时,但是,在添加一些UI之后,它看起来已经停止了。我不确定原因,甚至不知道如何诊断(删除UI代码并不能解决问题)。
我已经在info.plist文件中设置了背景模式:("应用播放音频或通过Airplay播放音频/视频")我也在我的网站中获得以下内容app delegate:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback
error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES
error:&activationErr];
return YES;
}
在我的ViewDidLayoutSubViews方法中,我这样初始化了AVPLayer:
self.fAudioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
self.fAudioPlayer.numberOfLoops = 0;
[self.fAudioPlayer setVolume:volume];
[self.fVolumeLevelSlider setValue:volume];
其中fAudioPlayer的类型为AVAudioPlayer。当我的计时器被击中时,我会像这样播放音频:
self.fBGTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL];
[self.fAudioPlayer play];
我仍然会通过我的更改来查看我投入的内容,如果有的话,可能会导致声音停止在后台播放,从一个应用版本到下一个应用版本。有没有人在这看到任何可能不对的东西?
答案 0 :(得分:3)
移动这些行:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
在我开始玩我的计时器之前,解决了这个问题。
答案 1 :(得分:1)
为了让玩家在应用程序处于后台时继续玩游戏,您必须通过添加以下密钥来更新应用程序的info.plist文件
“所需的背景模式”并将值添加到“App播放音频或使用AirPlay播放音频/视频”
设置此属性允许应用甚至在后台播放/流式传输音频,同时最小化应用或打开其他应用(包括屏幕保护程序)。