iOS 7:音频无法在后台播放

时间:2014-01-19 01:18:25

标签: ios audio timer background

我正在编写一个通过计时器定期播放声音的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];

我仍然会通过我的更改来查看我投入的内容,如果有的话,可能会导致声音停止在后台播放,从一个应用版本到下一个应用版本。有没有人在这看到任何可能不对的东西?

2 个答案:

答案 0 :(得分:3)

移动这些行:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];

在我开始玩我的计时器之前,解决了这个问题。

答案 1 :(得分:1)

为了让玩家在应用程序处于后台时继续玩游戏,您必须通过添加以下密钥来更新应用程序的info.plist文件

“所需的背景模式”并将值添加到“App播放音频或使用AirPlay播放音频/视频”

设置此属性允许应用甚至在后台播放/流式传输音频,同时最小化应用或打开其他应用(包括屏幕保护程序)。