2012-05-03 27 views
22

設計iOS版生成音樂系統,採用了openFrameworks,我需要提供其中用戶可以收聽由應用程序產生的音樂模式時:如何處理iOS設備鎖定或其他應用程序時播放的背景音頻?

  • 設備被鎖定
  • 用戶使用其他應用程序

某些應用程序(如BLOOM或鬧鐘)的工作方式與此類似,並向用戶建議啓用/禁用此功能的開關。

對此有任何提示?

回答

34

播放背景音頻

播放或錄製音頻持續(在後臺即使在應用程序是 運行),可以註冊在 後臺執行這些任務的應用程序。您可以從Xcode項目的功能選項卡的背景模式部分 啓用音頻支持。 (您還可以通過在您的應用的Info.plist文件中包含UIBackgroundModes項和 值來啓用 此支持。)播放 中的音頻內容的應用必須播放可聽內容而不是靜音。

Apple reference "Playing and Recording Background Audio"

Ensuring That Audio Continues When the Screen Locks

啓用/禁用此功能,我發現Activating and Deactivating Your Audio Session,我還沒有嘗試過自己,但它看起來像你所需要的。

+1

喜Danich並非常感謝您的回答。有沒有辦法在運行時更改它? – gluon

+0

我打開另一個線程這個特殊點:http://stackoverflow.com/questions/10504432/how-can-we-handle-enable-disable-background-audio-abilities-at-runtime-on-ios-de – gluon

+1

對不起,沒有注意到你有關啓用/禁用的問題。我認爲新線程不是一個好主意。更新了我的答案。接受,如果你認爲它有用。 – DanSkeel

29

您需要在plist文件中進行幾項更改。

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

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

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

然後,你需要在AppDelegate中

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

+6

「應用程序不在後臺運行」應設置爲「否」 – ctpenrose

+2

這很好,謝謝。我還需要設置功能>背景模式>音頻和AirPlay – Dunc

+0

我在哪裏準確寫入此代碼? – Danpe

-1

您也可以使用此代碼:

AVAudioSession *session = [AVAudioSession sharedInstance]; 
[session setCategory:AVAudioSessionCategoryPlayback error:NULL]; 

AVAudioSession *backgroundMusic = [AVAudioSession sharedInstance]; 

[backgroundMusic setCategory:AVAudioSessionCategoryPlayback error:NULL]; 
2

請在Xcode項目設置,以及在代碼中的以下變化。

步驟1)在Xcode的導航器中選擇您的項目文件。然後,從功能部分開啓背景模式子部分。在給出背景模式列表後,在音頻& Airplay開關上打勾。

stp 2)使用下面的swift代碼,基本上你需要爲你的應用程序設置音頻會話。

var audioPlayer : AVAudioPlayer! 

@IBAction func playButtonClicked(sender : AnyObject){ 

    let dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 
    dispatch_async(dispatchQueue, { 

     if let data = NSData(contentsOfFile: self.audioFilePath()) 
     { 
      do{ 
       let session = AVAudioSession.sharedInstance() 

       try session.setCategory(AVAudioSessionCategoryPlayback) 
       try session.setActive(true) 

       self.audioPlayer = try AVAudioPlayer(data: data) 
       //self.audioPlayer.delegate = self 
       self.audioPlayer.prepareToPlay() 
       self.audioPlayer.play() 
      } 
      catch{ 
       print("\(error)") 
      } 
     } 
    }); 
} 

func audioFilePath() -> String{ 

    let filePath = NSBundle.mainBundle().pathForResource("mySong", ofType: "mp3")! 
    return filePath 
} 

此音頻回放會話將播放您的應用程序回放,即使應用程序處於後臺或手機處於靜音模式或設備已鎖定。

0

你需要讓夫婦在plist文件的變化。

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

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

let dispatchQueue = DispatchQueue.global() 
      dispatchQueue.async(execute: { 
        do{ 
         let session = AVAudioSession.sharedInstance() 

         try session.setCategory(AVAudioSessionCategoryPlayback) 
         try session.setActive(true) 

         self.isObjectAllocate = true 
         if self.isPlayed == false{ 
          self.playSound(soundName: "http://radio.zahraun.com:8000/live.m3u") 
          self.isPlayed = true 
          self.btnPlayAudio.setImage(#imageLiteral(resourceName: "pause") , for: .normal) 

         }else{ 
          self.audioPlayer.pause() 
          self.isPlayed = false 
          self.btnPlayAudio.setImage(#imageLiteral(resourceName: "audioPlay"), for: .normal) 
         } 
        } 
        catch{ 
         print("\(error)") 
        } 
      }); 
相關問題