? ? ? ?最近在做藍牙項目,當藍牙斷開連接時需要播放音樂提示。有以下幾種情況需要考慮: ?
? ? ? ?1、app在前臺運行,藍牙斷開播放音樂。
? ? ? ?2、app在前臺運行、藍牙斷開播放音樂,鎖屏或者是進入后臺也能播放。
? ? ? ?3、app在后臺運行、藍牙斷開播放音樂。
? ? ? ?前臺運行播放音樂比較簡單,直接調用播放音樂代碼就行,主要是app進入后臺運行播放音樂解決方案,ios像后臺播放聲音就很苦逼了,因為ios的應用切換到后臺,應用會被掛起,非特別的應用不能在播放聲音。查找了相關資料有以下幾種解決方案:
? ? ? 1、把應用設置成后臺播放程序,需要在info.plist文件中加屬性值,增加required background modes這個key項,并選擇App plays audio or streams audio/video using AirPlay這個value項.如下圖
或者選中Targets-->Capabilities-->BackgroundModes-->ON,并勾選Audio and AirPlay選項,如下圖
? ? ? ?使用后臺播放聲音測試:
? ? ? ?當你的應用在正播放音樂時進入后臺后,繼續播放音樂。
? ? ? ?當你的應用進入后臺前不播放音樂,那么你的應用在后臺播放音樂,對不起你的應用沒有任何音樂放出。
? ? ? ? 看來后臺播放聲音就為了播放器專做的,你的應用沒事開啟這個功能徒增被駁回的風險。為了解決當你的應用進入后臺前不播放音樂,那么你的應用在后臺播放音樂,沒有任何聲音放出。我們使用- (void)applicationDidEnterBackground:(UIApplication *)application方法,當程序被推送到后臺的時候調用。所以要設置后臺繼續運行,則在這個函數里面設置即可。具體的做法就是在此方法中發送通知給控制器,讓控制器播放音樂,將聲音設置成0,當藍牙斷開連接是,將聲音設置成1就有聲音播放出來,- (void)applicationWillEnterForeground:(UIApplication *)application方法,當程序從后臺將要重新回到前臺時候調用,在此方法中發送給控制器結束音樂的播放。
? ? ? ?2、通過APNS推送過來的消息中包含有小的聲音文件。你的應用收到后會播放這個聲音。APNS是針對整個手機的,就是你的手機關機,只要應用不解綁定和服務的PUSH連接,那么你的手機也能收道通知。通過APNS推送過來的消息中設置的大都是default,所以收到的都是一樣的聲音,你可以修改發送的聲音文件的名稱,但是它肯定不支持.mp3(已經測試過)。若通過APNS發送聲音文件的方式,收到響應超延遲不是一般的大,延遲幾分鐘也有可能,必定你的聲音經過一大圈傳輸。再加上APNS本來就有漏包率,通過個推丟失和延遲更大些。若你受得了這種延遲可以采用這種方式。
? ? ? ?3、彈出本地通知,并在本地通知中播放音樂。