iOS- 關於AVAudioSession的使用——後台播放音樂

來源:互聯網
上載者:User

標籤:else   and   網路歌曲   ros   aci   red   會話   tps   lse   

AVAudioSession是一個單例,無需執行個體化即可直接使用。AVAudioSession在各種音頻環境中起著非常重要的作用?針對不同的音頻應用情境,需要設定不同的音頻會話分類 1.1AVAudioSession的類別  ?AVAudioSessionCategoryAmbient–混音播放,例如雨聲、汽車引擎等,可與其他音樂一起播放?AVAudioSessionCategorySoloAmbient–後台播放,其他音樂將被停止?AVAudioSessionCategoryPlayback–獨佔音樂播放?AVAudioSessionCategoryRecord–錄製音頻?AVAudioSessionCategoryPlayAndRecord–播放和錄製音頻?AVAudioSessionCategoryAudioProcessing–使用硬體解碼器處理音頻,該音頻會話使用期間,不能播放或錄音 圖解:

類別

輸入

輸出

與iPOD混合

遵從靜音

 

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的使用——後台播放音樂

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.