声音在模拟器中播放但不在设备上
问题描述:
我试图让我的应用程序在后台播放声音。我有这个代码在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和画中画”框。
答
为了返回到您的应用程序并让声音继续播放,您必须将代码添加到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中
写这些太多的代码现在,您可以轻松地运行,而手机屏幕锁音频或进入后台。
嘿,当你加载你的声音,你检查了名称的区分大小写?在模拟器上,区分大小写不是问题,但在设备上是这样。因此,如果您的声音被命名为“Poof.mp3”,并且您尝试加载“poof.mp3”,则它将在模拟器上工作,但不在设备上。 – Randy
我敢肯定,我的声音在应用程序之外,而不是在应用程序之外。 – Arch
@arch,我有这个问题。你有没有设法找到解决方案? – irkinosor