設計iOS版生成音樂系統,採用了openFrameworks,我需要提供其中用戶可以收聽由應用程序產生的音樂模式時:如何處理iOS設備鎖定或其他應用程序時播放的背景音頻?
- 設備被鎖定
- 用戶使用其他應用程序
某些應用程序(如BLOOM或鬧鐘)的工作方式與此類似,並向用戶建議啓用/禁用此功能的開關。
對此有任何提示?
設計iOS版生成音樂系統,採用了openFrameworks,我需要提供其中用戶可以收聽由應用程序產生的音樂模式時:如何處理iOS設備鎖定或其他應用程序時播放的背景音頻?
某些應用程序(如BLOOM或鬧鐘)的工作方式與此類似,並向用戶建議啓用/禁用此功能的開關。
對此有任何提示?
播放背景音頻
播放或錄製音頻持續(在後臺即使在應用程序是 運行),可以註冊在 後臺執行這些任務的應用程序。您可以從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,我還沒有嘗試過自己,但它看起來像你所需要的。
您需要在plist文件中進行幾項更改。
即 1)設置所需的背景模式到App播放音頻
2)設置在應用背景不運行爲NO。
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
然後,你需要在AppDelegate中
寫這些太多的代碼現在,您可以輕鬆地運行,而手機屏幕鎖音頻或進入後臺。
您也可以使用此代碼:
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryPlayback error:NULL];
AVAudioSession *backgroundMusic = [AVAudioSession sharedInstance];
[backgroundMusic setCategory:AVAudioSessionCategoryPlayback error:NULL];
請在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
}
此音頻回放會話將播放您的應用程序回放,即使應用程序處於後臺或手機處於靜音模式或設備已鎖定。
看這個教程。它有一些後臺服務實例
你需要讓夫婦在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)")
}
});
喜Danich並非常感謝您的回答。有沒有辦法在運行時更改它? – gluon
我打開另一個線程這個特殊點:http://stackoverflow.com/questions/10504432/how-can-we-handle-enable-disable-background-audio-abilities-at-runtime-on-ios-de – gluon
對不起,沒有注意到你有關啓用/禁用的問題。我認爲新線程不是一個好主意。更新了我的答案。接受,如果你認爲它有用。 – DanSkeel