iOS 后臺(tái)模式開發(fā)指南1——音頻播放

原文鏈接:https://github.com/hehonghuidev/iOS-tech-frontier/blob/master/issue-3/iOS后臺(tái)模式開發(fā)指南.md


這里簡單紀(jì)錄一下如何使用音頻播放實(shí)現(xiàn)后臺(tái)模式。

**注意: 對于我們這些有點(diǎn)小心思的人來說,如果你的APP確實(shí)為用戶播放音頻,你應(yīng)該只使用后臺(tái)音頻模式.如果你嘗試使用這個(gè)模式只是為了獲取當(dāng)程序安靜運(yùn)行的時(shí)候使用CPU的時(shí)長,蘋果將拒絕你APP的運(yùn)行. **

為了獲取到音頻播放裝置,你需要學(xué)習(xí) AV Foundation.打開你自定義的類,在頂部加入引用:

import AVFoundation

使用音頻會(huì)話的單例模式sharedInstance()去設(shè)置播放的類別,也確保了聲音是通過手機(jī)揚(yáng)聲器而不是通過手機(jī)聽筒傳播的.如果它執(zhí)行了,他會(huì)檢查調(diào)用是否失敗并記錄錯(cuò)誤.

do{
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: .defaultToSpeaker)
} catch {
    print(error)
}

接下來,你要添加播放器這個(gè)成員屬性

var player: AVQueuePlayer!

設(shè)置歌曲的列表,把它們(這里只有一首,多個(gè)歌曲可以參照原文)映射到主程序包的路徑中并把它們轉(zhuǎn)化為可以在AVQueuePlayer上播放的AVPlayerItems.此外,這個(gè)隊(duì)列被設(shè)置為循環(huán)播放.

let url = Bundle.main.url(forResource: "你的歌曲文件名字", withExtension: "你的歌曲文件格式")
        
let song = AVPlayerItem(url: url!)
        
player = AVQueuePlayer(items: [song])
        
player.actionAtItemEnd = .advance

使用addPeriodicTimeObserverForInterval(_:queue:usingBlock:),給播放器一個(gè)周期性的觀察者,如果這個(gè)APP在前臺(tái),這個(gè)觀察者每一秒就會(huì)被調(diào)用一次并且更新UI.由于你想在結(jié)束時(shí)更新UI,你必須確保這些代碼在主隊(duì)列中被調(diào)用.這就是你指定dispatch_get_main_queue()參數(shù)的原因.

你也可以根據(jù)自己時(shí)間精度的需求更改CMTimeMake的值,比如CMTimeMake(1, 100)就是1秒調(diào)用100次.對應(yīng)的format可以改成 "%02.2f".

player.addPeriodicTimeObserver(forInterval: CMTimeMake(1, 1), queue: DispatchQueue.main) { (time) in
    let timeString = String(format: "%1.f", CMTimeGetSeconds(time))
    print(timeString)
}

當(dāng)你調(diào)用播放器的播放方法,就能從控制臺(tái)看到輸出信息了。

player.play()

測試后臺(tái)模式是否起作用.按home按鈕(如果你正在使用模擬器,按Cmd-Shift-H).如果你在真正的設(shè)備上運(yùn)行(不是Xcode 的模擬器)音樂將停止.這是為什么呢?還有很重要的一塊落下了!)

對于大多數(shù)的后臺(tái)模式你需要在Info.plist中添加一個(gè)key用來指明APP在后臺(tái)中運(yùn)行的代碼.幸運(yùn)的是,在Xcode6可以通過復(fù)選框進(jìn)行選擇.

回到Xcode,按照以下步驟進(jìn)行操作:

1.在項(xiàng)目管理器中點(diǎn)擊工程

2.點(diǎn)擊目標(biāo)TheBackgrounder

3.點(diǎn)擊功能標(biāo)簽

4.滑動(dòng)背景模式并設(shè)置為ON

5.選中 Audio和AirPlay

重新編譯并且運(yùn)行.開始運(yùn)行音樂并且點(diǎn)擊home鍵,盡管這個(gè)APP在后臺(tái)運(yùn)行,這次你就會(huì)依舊能夠聽到音樂,也能看到控制臺(tái)的輸出.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容