標籤:else and 網路歌曲 ros aci red 會話 tps lse
AVAudioSession是一個單例,無需執行個體化即可直接使用。AVAudioSession在各種音頻環境中起著非常重要的作用?針對不同的音頻應用情境,需要設定不同的音頻會話分類 1.1AVAudioSession的類別 ?AVAudioSessionCategoryAmbient–混音播放,例如雨聲、汽車引擎等,可與其他音樂一起播放?AVAudioSessionCategorySoloAmbient–後台播放,其他音樂將被停止?AVAudioSessionCategoryPlayback–獨佔音樂播放?AVAudioSessionCategoryRecord–錄製音頻?AVAudioSessionCategoryPlayAndRecord–播放和錄製音頻?AVAudioSessionCategoryAudioProcessing–使用硬體解碼器處理音頻,該音頻會話使用期間,不能播放或錄音 圖解:
AVAudioSessionCategoryAmbient |
No |
Yes |
Yes |
Yes |
AVAudioSessionCategorySoloAmbient |
No |
Yes |
No |
Yes |
AVAudioSessionCategoryPlayback |
No |
Yes |
No |
No |
AVAudioSessionCategoryRecord |
Yes |
No |
No |
No |
AVAudioSessionCategoryPlayAndRecord |
Yes |
Yes |
No |
No |
2.後台播放音樂 2.1.開啟所需要的後台模式
選中Targets-->Capabilities-->BackgroundModes-->ON,並勾選Audio and AirPlay選項,如
2.2.在Appdelegate.m的applicationWillResignActive:方法中啟用後台播放,代碼如下
在Appdelegate.m中定義全域變數
UIBackgroundTaskIdentifier _bgTaskId;
-(void)applicationWillResignActive:(UIApplication )application{ //開啟幕後處理多媒體事件 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; AVAudioSession session=[AVAudioSession sharedInstance]; [session setActive:YES error:nil]; //後台播放 [session setCategory:AVAudioSessionCategoryPlayback error:nil]; //這樣做,可以在按home鍵進入後台後 ,播放一段時間,幾分鐘吧。但是不能持續播放網路歌曲,若需要持續播放網路歌曲,還需要申請背景工作id,具體做法是:_bgTaskId=[AppDelegate backgroundPlayerID:_bgTaskId]; //其中的_bgTaskId是背景工作UIBackgroundTaskIdentifier _bgTaskId;在appdelegate.m中定義的全域變數}
2.3.實現一下backgroundPlayerID這個方法
+(UIBackgroundTaskIdentifier)backgroundPlayerID:(UIBackgroundTaskIdentifier)backTaskId{ //設定並啟用音頻會話類別 AVAudioSession *session=[AVAudioSession sharedInstance]; [session setCategory:AVAudioSessionCategoryPlayback error:nil]; [session setActive:YES error:nil]; //允許應用程式接收遠端控制 [[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; //設定背景工作ID UIBackgroundTaskIdentifier newTaskId=UIBackgroundTaskInvalid; newTaskId=[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil]; if(newTaskId!=UIBackgroundTaskInvalid&&backTaskId!=UIBackgroundTaskInvalid) { [[UIApplication sharedApplication] endBackgroundTask:backTaskId]; } return newTaskId;}
2.4.處理中斷事件,如電話,語音等 原理是,在音樂播放被中斷時,暫停播放,在中斷完成後,開始播放。具體做法是:
-->在通知中樞註冊一個事件中斷的通知://處理中斷事件的通知[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleInterreption:) name:AVAudioSessionInterruptionNotification object:[AVAudioSession sharedInstance]];-->實現接收到中斷通知時的方法//處理中斷事件-(void)handleInterreption:(NSNotification *)sender{ if(_played) { [self.playView.player pause]; _played=NO; } else { [self.playView.player play]; _played=YES; }}
iOS- 關於AVAudioSession的使用——後台播放音樂