【问题标题】:iOS 7: Audio not playing in backgroundiOS 7:音频不在后台播放
【发布时间】:2014-01-19 01:18:24
【问题描述】:

我正在编写一个通过计时器定期播放声音的 iPhone 应用程序。这个应用程序的第一个版本在最小化或屏幕空白时播放音频很好,但是,在添加一些 UI 后,它看起来已经停止了。我不确定为什么,甚至不知道如何诊断(删除 UI 代码并不能解决问题)。

我在 info.plist 文件中设置了背景模式:(“应用程序通过 Airplay 播放音频或流式传输音频/视频”)并且我的应用程序委托中也有以下内容:

- (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];

我仍在检查我的更改,以查看我添加的内容(如果有的话)可能会导致声音在后台从一个应用程序版本停止播放到下一个应用程序版本。有没有人看到这里有什么不对劲的地方?

【问题讨论】:

  • 如何在后台运行计时器?

标签: ios audio timer background


【解决方案1】:

移动这些行:

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

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

【讨论】:

    【解决方案2】:

    为了让播放器在应用程序处于后台时也能继续播放,您必须通过添加以下键来更新应用程序的 info.plist 文件

    “必需的背景模式”并将值添加到“应用程序使用 AirPlay 播放音频或流式传输音频/视频”

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多