声音在模拟器中播放但不在设备上

问题描述:

我试图让我的应用程序在后台播放声音。我有这个代码在viewDidLoad()中运行:声音在模拟器中播放但不在设备上

do { 
     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
     print("AVAudioSession Category Playback set") 
     do { 
      try AVAudioSession.sharedInstance().setActive(true) 
      print("AVAudioSession has been set Active") 
     } catch let error as NSError { 
      print(error.localizedDescription) 
     } 
    } catch let error as NSError { 
     print(error.localizedDescription) 
    } 

它运行良好并设置为活动状态。在模拟器中运行时,我可以返回主屏幕并继续播放声音,但是当我在设备上运行声音时,声音无法在应用程序之外播放。

声音通过AVAudioPlayer每x秒钟播放一次。

注意:我已启用设备功能中的背景模式并检查了“音频,Airplay和画中画”框。

+0

嘿,当你加载你的声音,你检查了名称的区分大小写?在模拟器上,区分大小写不是问题,但在设备上是这样。因此,如果您的声音被命名为“Poof.mp3”,并且您尝试加载“poof.mp3”,则它将在模拟器上工作,但不在设备上。 – Randy

+1

我敢肯定,我的声音在应用程序之外,而不是在应用程序之外。 – Arch

+1

@arch,我有这个问题。你有没有设法找到解决方案? – irkinosor

如果您随时停止播放声音,iOS可能不允许应用程序在后台重新开始播放声音。

+0

你是什么意思?声音播放完毕后,重播声音。 – Arch

为了返回到您的应用程序并让声音继续播放,您必须将代码添加到viewWillAppear()。当您重新打开您的应用程序viewDidLoad()将不会被调用,但viewWillAppear()将会。

+1

我的问题是,当我的应用程序以外的声音无法播放时,它在重新打开应用程序时起作用。 – Arch

您需要对plist文件进行几处更改。

即1)设置所需的背景模式到App播放音频

2)设置在应用背景不运行为NO。

NSError *setCategoryErr = nil; 
    NSError *activationErr = nil; 
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr]; 
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr]; 

然后,你需要在AppDelegate中

写这些太多的代码现在,您可以轻松地运行,而手机屏幕锁音频或进入后台。