日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android音樂編程:管理音頻焦點

您的應用程序在開始播放音頻文件前,首先應該請求獲得音頻焦點,并且應該同時注冊監(jiān)聽音頻焦點的丟失通知,即如果音頻焦點被系統(tǒng)或其他的應用程序搶占時,您的應用程序可以做出合適的響應。

獲取音頻焦點

您的應用程序在開始播放任何音頻之前,首先應該持有流的音頻焦點。

可以通過調(diào)用 requestAudioFocus()  來實現(xiàn),如果請求成功,返回 AUDIOFOCUS_REQUEST_GRANTED 。

您必須指定流類型(使用的是哪一個流)和音頻焦點的類型(短暫的或是持久的)。

瞬態(tài)焦點用來播放很短時間的音頻(例如,播放導航指令)。

持久焦點用來播放較長一段時間的音頻(例如,播放音樂)。

下面的代碼片斷演示了請求音樂音頻流的永久音頻焦點。

例如當用戶按下播放背景音樂的按鍵,您應該立即請求音頻焦點,當成功獲得了焦點后再開始播放音樂。

 
 
 
  1. AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); 
  2. ... 
  3.  
  4. // Request audio focus for playback 
  5. int result = am.requestAudioFocus(afChangeListener, 
  6. // Use the music stream. 
  7. AudioManager.STREAM_MUSIC, 
  8. // Request permanent focus. 
  9. AudioManager.AUDIOFOCUS_GAIN); 
  10.  
  11. if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
  12.     am.unregisterMediaButtonEventReceiver(RemoteControlReceiver); 
  13.     // Start playback. 
  14.     // 開始播放音樂文件 

一旦您的應用程序完成了播放,請記得要調(diào)用 abandonAudioFocus()  方法來通知系統(tǒng)釋放音頻焦點,同時注銷相關(guān)的 AudioManager.OnAudioFocusChangeListener 。這樣當您的應用程序釋放了音頻焦點,則系統(tǒng)會允許其他被中斷的應用程序重新獲取該焦點來繼續(xù)播放。

 
 
 
  1. // Abandon audio focus when playback complete 
  2. am.abandonAudioFocus(afChangeListener); 

當請求瞬態(tài)音頻焦點時有一個附加參數(shù)可供設(shè)置,即是否允許 “DUCK”。通常當應用程序失去了音頻焦點時應該停止播放。如果獲取短暫音頻焦點的時候設(shè)置了”DUCK” 附加參數(shù),則允許其他的應用程序繼續(xù)播放,不需要停止,只要降低音量就可以了,然后直到您的應用程序釋放了焦點,其他應用程序再重新獲得的時候,將音量還 原到有一開始的狀態(tài)。

 
 
 
  1. // Request audio focus for playback 
  2. int result = am.requestAudioFocus(afChangeListener, 
  3. // Use the music stream. 
  4. AudioManager.STREAM_MUSIC, 
  5. // Request permanent focus. 
  6. AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK); 
  7.  
  8. if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
  9.   // Start playback. 

“DUCK” 特別適合那種間歇性播放音頻流的應用程序,如駕駛導航的聲音提示。

每當其他的應用程序請求獲得音頻焦點(永久性的,短暫的,短暫并且支持DUCK的)的時候,您應用程序中注冊的音頻焦點監(jiān)聽器都會收到相應的消息通知。

處理音頻焦點的丟失

如果您的應用程序可以請求音頻焦點,那么當其他應用程序申請的時候,您的應用程序也可能會丟失音頻焦點。怎么樣應對音頻焦點丟失的情況則取決于音頻焦點丟失的方式。

當音頻焦點丟失時,您注冊的監(jiān)聽函數(shù)onAudioFocusChange()會收到一個事件通知,通知中的參數(shù)包括了具體的信息,比如是永久焦點丟失,短暫焦點丟失,還是短暫焦點且允許DUCK的焦點丟失。

通常,如果是短暫焦點的丟失,您的應用程序應該暫停當前的播放,但其他狀態(tài)信息繼續(xù)保持,并且應該持續(xù)監(jiān)聽音頻焦點的改變,一旦重新獲得了音頻焦點,則可以馬上恢復到以前的播放狀態(tài)。

假如是永久焦點的丟失,則通常意味著其他應用程序要長時間播放音頻了,您的應用程序應該停止播放,放棄音頻焦點的監(jiān)聽,并注銷所有的媒體按鈕監(jiān)聽 器,從而讓獲得焦點的其他應用程序來監(jiān)聽媒體播放控制按鈕的按鍵消息。如果要恢復您應用程序的播放狀態(tài),則通常需要用戶重新啟動您的應用程序。

在下面的代碼片段中,如果丟失的是短暫音頻焦點,則暫定當前應用程序的播放,如果丟失的是永久音頻焦點,則停止當前應用程序的播放,停止監(jiān)聽音頻焦點的變更,并注銷媒體按鈕事件的監(jiān)聽。

 
 
 
  1. OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() { 
  2.   public void onAudioFocusChange(int focusChange) { 
  3.     if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT 
  4.        // Pause playback 
  5.     } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { 
  6.       // Resume playback 
  7.     } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { 
  8.       am.unregisterMediaButtonEventReceiver(RemoteControlReceiver); 
  9.       am.abandonAudioFocus(afChangeListener); 
  10.       // Stop playback 
  11.     } 
  12.   } 
  13. }; 

如果丟失的短暫音頻焦點允許DUCK狀態(tài),在這種情況下,應用程序降低音量繼續(xù)播放,不需要暫停。

Duck!

DUCK:降低您應用程序的音量,從而不會打擾其他應用程序音頻的播放。

在下面的代碼片段中,當我們失去焦點的時候,降低了媒體播放的音量,重新獲得焦點的時候,將音量恢復到原來的狀態(tài)。

 
 
 
  1. OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() { 
  2.   public void onAudioFocusChange(int focusChange) { 
  3.     if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK 
  4.       // Lower the volume 
  5.     } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { 
  6.       // Raise it back to normal 
  7.     } 
  8.   } 
  9. }; 

音頻焦點的丟失是非常重要的一種系統(tǒng)狀態(tài)變化通知,系統(tǒng)會廣播很多有關(guān)音頻狀態(tài)變化的通知,您的應用程序應該監(jiān)聽這些變化,并作出合適的應對方案,從而提高用戶的音樂體驗。

參考文摘:

http://developer.Android.com/training/managing-audio/audio-focus.html

原文鏈接:

http://blog.zhourunsheng.com/2011/12/android-%E9%9F%B3%E4%B9%90%E7%BC%96%E7%A8%8B%E4%B8%93%E9%A2%98%E4%B9%8B%E7%AE%A1%E7%90%86%E9%9F%B3%E9%A2%91%E7%84%A6%E7%82%B9/


新聞標題:Android音樂編程:管理音頻焦點
瀏覽路徑:http://m.5511xx.com/article/coochdc.html