2016-06-30-Android音頻焦點(diǎn)AudioFocus使用

Android開發(fā)中免不了需要播放視頻,音頻文件,但是手機(jī)上可能有其他的一些軟件,在后臺播放音頻的時候,這個時候另外的軟件也需要播放音頻,這個時候就會出現(xiàn)倆個音頻同時播放的問題,在Android2.2之后提供了audioFocus獲取音頻的焦點(diǎn),但是這個并不是強(qiáng)制需要實(shí)現(xiàn)的,所以當(dāng)你在測試的時候,有的應(yīng)用沒有處理的音頻焦點(diǎn),所以會感覺沒有效果,其實(shí)我個認(rèn)為可以使用系統(tǒng)的音樂播放器做測試,基本不會出現(xiàn)什么問題(處理的時候注意內(nèi)存泄漏)
https://developer.android.com/training/managing-audio/audio-focus.html

1,獲取焦點(diǎn)
public boolean requestFocus() {    
   if(mFocusChangeListener != null &&mFocusChangeListener.get() != null) {
      return AudioManager.AUDIOFOCUS_REQUEST_GRANTED == 
      mAudioManager.requestAudioFocus(mFocusChangeListener.get(),     
      AudioManager.STREAM_MUSIC,                                  
      AudioManager.AUDIOFOCUS_GAIN);    
    } 
   return false;
}
2,釋放焦點(diǎn)
public boolean abandonFocus() {    
if(mFocusChangeListener != null &&  mFocusChangeListener.get() != null) {        
    return AudioManager.AUDIOFOCUS_REQUEST_GRANTED ==     
        mAudioManager.abandonAudioFocus(mFocusChangeListener);    
    }    
    return false;
}
3,處理丟失焦點(diǎn)1

實(shí)現(xiàn)AudioManager.OnAudioFocusChangeListener接口實(shí)現(xiàn)onAudioFocusChange(int focusChange)方法

@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {    
   case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT://Pause playback        
        break;    
   case AudioManager.AUDIOFOCUS_GAIN://Resume playback        
       break;    
  case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK://        
      break;    
  case AudioManager.AUDIOFOCUS_LOSS://Stop playback
      //am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);        
      abandonFocus();    
      break;
}
4,處理丟失焦點(diǎn)2

focusChange參數(shù)告你音頻焦點(diǎn)時如何改變的,并且能夠是下面的值之一(它們是所有的在AudioManager類中定義的常量):

  1. AUDIOFOCUS_GAIN:你已經(jīng)獲得音頻焦點(diǎn);
  2. AUDIOFOCUS_LOSS:你已經(jīng)失去音頻焦點(diǎn)很長時間了,必須終止所有的音頻播放。因為長時間的失去焦點(diǎn)后,不應(yīng)該在期望有焦點(diǎn)返回,這是一個盡可能清除不用資源的好位置。例如,應(yīng)該在此時釋放MediaPlayer對象;
  3. AUDIOFOCUS_LOSS_TRANSIENT:這說明你臨時失去了音頻焦點(diǎn),但是在不久就會再返回來。此時,你必須終止所有的音頻播放,但是保留你的播放資源,因為可能不久就會返回來。
  4. AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:這說明你已經(jīng)臨時失去了音頻焦點(diǎn),但允許你安靜的播放音頻(低音量),而不是完全的終止音頻播放。目前所有的情況下,oFocusChange的時候停止mediaPlayer */
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android音頻焦點(diǎn)AudioFocus使用 Android開發(fā)中免不了需要播放視頻,音頻文件,但是手機(jī)上可能有...
    超__越閱讀 986評論 0 1
  • Media Playback Android多媒體框架包涵了對播放多種通用媒體的類型的支持,所以你可以很容易的集成...
    VegetableAD閱讀 977評論 0 0
  • Android 多媒體框架包含了支持播放的一系列常見多媒體類型,以此可以很容易地整合諸如音頻、視頻、圖片到你的應(yīng)用...
    LeaYw閱讀 3,334評論 1 22
  • 今天武志紅老師心理學(xué)課的留言文章給我了一些思考和啟發(fā),希望能夠引起你的共鳴。 你在工作和生活中是習(xí)慣說“YES”還...
    小西伯利亞狼閱讀 738評論 0 0
  • [cp]@HHHHHHa哈: 又是一年夏天到,又是考驗演技的時候了,我就想知道有多少人跟我一樣買西瓜裝模作樣?xùn)|拍拍...
    阿兒豆豆閱讀 101評論 0 0

友情鏈接更多精彩內(nèi)容