下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
安卓音頻焦點問題及案例因為系統(tǒng)中可能會有多個應(yīng)用程序會播放音頻,所以需要考慮他們之間該如何交互,為了避免多個應(yīng)用程序同時播放音樂,Android系統(tǒng)使用音頻焦點來進行統(tǒng)一管理,即只有獲得了音頻焦點的應(yīng)用程序才可以播放音樂。應(yīng)用程序在開始播放音頻文件前,首先應(yīng)該請求獲得音頻焦點,并且應(yīng)該同時注冊監(jiān)聽音頻焦點的丟失通知,即如果音頻焦點被系統(tǒng)或其他的應(yīng)用程序搶占時,應(yīng)用程序可以做出合適的響應(yīng)。正確對于音頻的播放流程如下:1獲取音頻焦點requestAudioFocus2取成功后,開始播放音頻3處理音頻焦點的丟失和“DUCK”4播放完畢后取消焦點獲取音頻焦點當應(yīng)用程序在開始播放任何音頻之前,首先應(yīng)該持有流的音頻焦點??梢酝ㄟ^調(diào)用requestAudioFocus()來實現(xiàn),如果返回AUDIOFOCUS_REQUEST_GRANTED則表示請求成功。必須指定流類型(使用的是哪一個流)和音頻焦點的類型(短暫的或是持久的)。瞬態(tài)焦點用來播放很短時間的音頻(例如,播放導航指令)。持久焦點用來播放較長一段時間的音頻(例如,播放音樂)。下面的代碼片斷演示了請求音樂音頻流的永久音頻焦點。例如當用戶按下播放背景音樂的按鍵,您應(yīng)該立即請求音頻焦點,當成功獲得了焦點后再開始播放音樂。AudioManageram=mContext.getSystemService(Context.AUDIO_SERVICE);1....2.//Requestaudiofocusforplaybackintresult=am.requestAudioFocus(afChangeListener,//Usethemusicstream.AudioManager.STREAM_MUSIC,//Requestpermanentfocus.AudioManager.AUDIOFOCUS_GAIN);9.if(result==AudioManager.AUDIOFOCUS_REQUEST_GRANTED){am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);//Startplayback.//開始播放音樂文件}如果應(yīng)用程序完成了播放,請記著要調(diào)用abandonAudioFocus()方法來通知系統(tǒng)釋放音頻焦點,同時注銷相關(guān)的AudioManager.OnAudioFocusChangeListener。這樣當應(yīng)用程序釋放了音頻焦點,則系統(tǒng)會允許其他被中斷的應(yīng)用程序重新獲取該焦點來繼續(xù)播放。Java代碼//Abandonaudiofocuswhenplaybackcompleteam.abandonAudioFocus(afChangeListener);當請求瞬態(tài)音頻焦點時有一個附加參數(shù)可供設(shè)置,即是否允許“DUCK”。通常當應(yīng)用程序失去了音頻焦點時應(yīng)該停止播放。如果獲取短暫音頻焦點的時候設(shè)置了'DUCK”附加參數(shù),則允許其他的應(yīng)用程序繼續(xù)播放,不需要停止,只要降低音量就可以了,然后直到您的應(yīng)用程序釋放了焦點,其他應(yīng)用程序再重新獲得的時候,將音量還原到有一開始的狀態(tài)。//Requestaudiofocusforplaybackintresult=am.requestAudioFocus(afChangeListener,//Usethemusicstream.AudioManager.STREAM_MUSIC,//Requestpermanentfocus.AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);6.if(result==AudioManager.AUDIOFOCUS_REQUEST_GRANTED){//Startplayback.}“DUCK”特別適合那種間歇性播放音頻流的應(yīng)用程序,如駕駛導航的聲音提示。每當其他的應(yīng)用程序請求獲得音頻焦點(永久性的,短暫的,短暫并且支持DUCK的)的時候,您應(yīng)用程序中注冊的音頻焦點監(jiān)聽器都會收到相應(yīng)的消息通知。處理音頻焦點的丟失如果此應(yīng)用程序可以請求音頻焦點,那么當其他應(yīng)用程序申請的時候,此應(yīng)用程序也可能會丟失音頻焦點。怎么樣應(yīng)對音頻焦點丟失的情況則取決于音頻焦點丟失的方式。當音頻焦點丟失時,注冊的監(jiān)聽函數(shù)onAudioFocusChange()會收到一個事件通知,通知中的參數(shù)包括了具體的信息,比如是永久焦點丟失,短暫焦點丟失,還是短暫焦點且允許DUCK的焦點丟失。通常,如果是短暫焦點的丟失,應(yīng)用程序應(yīng)該暫停當前的播放,但其他狀態(tài)信息繼續(xù)保持,并且應(yīng)該持續(xù)監(jiān)聽音頻焦點的改變,一旦重新獲得了音頻焦點,則可以馬上恢復(fù)到以前的播放狀態(tài)。假如是永久焦點的丟失,則通常意味著其他應(yīng)用程序要長時間播放音頻了,應(yīng)用程序應(yīng)該停止播放,放棄音頻焦點的監(jiān)聽,并注銷所有的媒體按鈕監(jiān)聽器,從而讓獲得焦點的其他應(yīng)用程序來監(jiān)聽媒體播放控制按鈕的按鍵消息。如果要恢復(fù)應(yīng)用程序的播放狀態(tài),則通常需要用戶重新手動啟動播放在應(yīng)用程序中。在下面的代碼片段中,如果丟失的是短暫音頻焦點,則暫定當前應(yīng)用程序的播放,如果丟失的是永久音頻焦點,則停止當前應(yīng)用程序的播放,停止監(jiān)聽音頻焦點的變更,并注銷媒體按鈕事件的監(jiān)聽。OnAudioFocusChangeListenerafChangeListener=newOnAudioFocusChangeListener(){publicvoidonAudioFocusChange(intfocusChange){if(focusChange==AUDIOFOCUS_LOSS_TRANSIENT//Pauseplayback}elseif(focusChange==AudioManager.AUDIOFOCUS_GAIN){//Resumeplayback}elseif(focusChange==AudioManager.AUDIOFOCUS_LOSS){am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);am.abandonAudioFocus(afChangeListener);//StopplaybackTOC\o"1-5"\h\z}}};13.如果丟失的短暫音頻焦點允許DUCK狀態(tài),在這種情況下,應(yīng)用程序可以降低音量繼續(xù)播放,不需要暫停。Ducking時需要降低當前應(yīng)用程序的音量,從而不會打擾其他應(yīng)用程序音頻的播放。在下面的代碼片段中,當我們失去焦點的時候,降低了媒體播放的音量,重新獲得焦點的時候,將音量恢復(fù)到原來的狀態(tài)。OnAudioFocusChangeListenerafChangeListener=newOnAudioFocusChangeListener(){publicvoidonAudioFocusChange(intfocusChange){if(focusChange==AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK//Lowerthevolume}elseif(focusChange==AudioManager.AUDIOFOCUS_GAIN){//RaiseitbacktonormalTOC\o"1-5"\h\z}}};音頻焦點的丟失是非常重要的一種系統(tǒng)狀態(tài)變化通知,系統(tǒng)會廣播很多有關(guān)音頻狀態(tài)變化的通知,你的應(yīng)用程序應(yīng)該監(jiān)聽這些變化,并作出合適的應(yīng)對方案,從而提高用戶的音樂體驗。案例:問題現(xiàn)象:反饋關(guān)于使用手機百度,當搜索英文時,點擊手機百度上面的播放按鈕播放(或者不點擊播放),不關(guān)閉手機百度,然后操作其他的應(yīng)用使手機百度置于后臺。當此時來電話掛斷之后和手機其他通知提示音響完之后,會聽見一個你搜索的那個英文的音頻讀音。問題分析:1.看LOG的時候發(fā)現(xiàn),當打開百度搜索到英文出現(xiàn)手機百度的那個播放圖標時會出現(xiàn)下面的LOG,就是手機百度會請求系統(tǒng)去申請AudioFocusoLine2884:04-3015:24:26.319I/MediaFocusControl(950):AudioFocusrequestAudioFocus()fromandroid.media.AudioManager@42db1e10Handler(com.baidu.zeus.HTML5Audio){4277d408}2.可以從下面看到當來電時,音頻焦點會給到鈴聲流(AudioFocus_For_Phone_Ring_And_Calls),當掛斷電話時候會禁止掉(abandonAudioFocus)當前的音頻請求。Line4071:04-3015:25:42.459I/MediaFocusControl(950):AudioFocusrequestAudioFocus()fromAudioFocus_For_Phone_Ring_And_CallsLine5222:04-3015:25:51.449I/MediaFocusControl(950):AudioFocusabandonAudioFocus()f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電路cad課程設(shè)計項目
- 相機標定棋盤格課程設(shè)計
- 溫差發(fā)電的利用課程設(shè)計
- 樓道觸摸延時開關(guān)課程設(shè)計sch
- 早教送玩具回家課程設(shè)計
- 漢服發(fā)型基礎(chǔ)課程設(shè)計
- 烘干車間課程設(shè)計
- 服裝特色手工課程設(shè)計
- 機械課程設(shè)計 學分
- 福大機械設(shè)計課程設(shè)計
- 領(lǐng)導干部廉政知識競賽題庫及答案
- 降低銳器盒不規(guī)腎內(nèi)科品管圈課件
- 《了凡四訓》課件
- 2ttk7d6.0gd空調(diào)裝置使用維護說明書法補充
- 重大火災(zāi)隱患判定培訓課件
- 經(jīng)濟思想史課后習題答案
- 大學生就業(yè)與創(chuàng)業(yè)指導課件
- 如何理解歐盟MDR臨床評價要求
- (新平臺)國家開放大學《政治學原理》形考任務(wù)1-4參考答案
- 被動用法學習課件 高中日語人教版第三冊
- 清華大學電力系統(tǒng)分析課件孫宏斌
評論
0/150
提交評論