2016-03-01 122 views
3

我試圖讓我的應用程序在後臺播放聲音。我有這個代碼在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

回答

0

如果您隨時停止播放聲音,iOS可能不允許應用程序在後臺重新開始播放聲音。

+0

你是什麼意思?聲音播放完畢後,重播聲音。 – Arch

0

爲了返回到您的應用程序並讓聲音繼續播放,您必須將代碼添加到viewWillAppear()。當您重新打開您的應用程序viewDidLoad()將不會被調用,但viewWillAppear()將會。

+1

我的問題是,當我的應用程序以外的聲音無法播放時,它在重新打開應用程序時起作用。 – Arch

-1

您需要對plist文件進行幾處更改。

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

2)設置在應用背景不運行爲NO。

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

然後,你需要在AppDelegate中

寫這些太多的代碼現在,您可以輕鬆地運行,而手機屏幕鎖音頻或進入後臺。

相關問題