欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【Android Developers Training】 45. 控制音頻

系統 2065 0

注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術一般,由于喜愛安卓而產生了翻譯的念頭,純屬個人興趣愛好。

原文鏈接: http://developer.android.com/training/managing-audio/audio-focus.html


有很多應用會要播放音頻,所以他們之間如何交互是很重要的。為了防止每個音樂播放器應用在同一時間播放,Android使用音頻焦點來調整音頻的播放。也就是說,只有獲得了音頻焦點的應用可以播放音頻。

在你的應用開始播放音頻之前,它應該需求并接收音頻焦點。另外,它應該知道如何監聽音頻焦點丟失的情況,并在發生焦點丟失時能夠正確地響應。


一). 需求音頻焦點

在你的應用開始播放音頻之前,它應該獲取要使用音頻流的焦點。這需要調用 requestAudioFocus() 方法。如果請求成功,那么會返回 AUDIOFOCUS_REQUEST_GRANTED

你必須指定你正在使用的是什么流,和你期望獲得暫時的還是永久的音頻焦點。當你只需要短時間的播放音頻時(比如當播放一些使用導航時),那么應該請求暫時焦點。當你計劃在可預測的未來持續播放音頻時(比如播放音樂),那么你應該請求永久焦點。

下面的代碼請求音樂音頻流的永久焦點。你必須在你開始播放之前就請求音頻焦點,比如當用戶按下了播放鍵,或下一級別游戲的背景音樂開始時:

      AudioManager am =
      
         mContext.getSystemService(Context.AUDIO_SERVICE);

...




      
      
        //
      
      
         Request audio focus for playback
      
      
        int
      
       result =
      
         am.requestAudioFocus(afChangeListener,

                                 
      
      
        //
      
      
         Use the music stream.
      
      
                                         AudioManager.STREAM_MUSIC,

                                 
      
      
        //
      
      
         Request permanent focus.
      
      
                                         AudioManager.AUDIOFOCUS_GAIN);

   


      
      
        if
      
       (result ==
      
         AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {

    am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);

    
      
      
        //
      
      
         Start playback.
      
      

}
    

一旦你完成了播放,務必記得要調用 abandonAudioFocus() ,這將會告知系統你不再需要焦點并且注銷相關聯的 AudioManager.OnAudioFocusChangeListener 。對于放棄了暫時焦點的情況,這回允許任何被打斷的應用繼續播放。

      
        //
      
      
         Abandon audio focus when playback complete    
      
      

am.abandonAudioFocus(afChangeListener);
    

當請求暫時音頻焦點時,你可以有一個額外的選項:你是否希望啟用“ ducking ”。一般的,當一個正常的應用丟失了音頻焦點后,它會立馬停止播放。通過請求允許“ ducking ”的暫時音頻焦點,相當于你告知了其他應用:你們可以繼續播放,但是他們需要在焦點回到他們手中之前降低音量。

      
        //
      
      
         Request audio focus for playback
      
      
        int
      
       result =
      
         am.requestAudioFocus(afChangeListener,

                             
      
      
        //
      
      
         Use the music stream.
      
      
                                     AudioManager.STREAM_MUSIC,

                             
      
      
        //
      
      
         Request permanent focus.
      
      
                                     AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK);

   


      
      
        if
      
       (result ==
      
         AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {

    
      
      
        //
      
      
         Start playback.
      
      

}
    

" Ducking "對于那些間歇性使用音頻流的應用特別有用,比如那些語音駕駛提醒的。

在任何時候,若其他的應用像上面描述的那樣請求音頻焦點,它所選擇的永久的活暫時的(有或沒有“ ducking ”選項)音頻焦點,在請求時都會被你注冊的監聽器所接收。


二). 處理焦點丟失

如果你的應用請求了音頻焦點,它遵守這樣的規定:如果其他應用請求焦點,它會按照次序丟失焦點。你的應用應該如何響應焦點丟失取決于丟失的方式。

在你請求音頻焦點時,注冊的音頻焦點變更監聽器中 onAudioFocusChange() 回調函數會接收一個參數,它描述焦點變化的事件。特別地,可能的焦點丟失事件反映的是上一部分的焦點請求類型,永久丟失,暫時丟失以及允許“ ducking ”的暫時焦點。

一般而言,一個暫時的音頻焦點丟失會導致你的應用音頻流沒有聲音,但其它方面會保持不變。你應該持續檢查音頻焦點的變化,并準備在你重新獲得焦點時,從暫停額位置繼續播放。

如果音頻焦點要永久丟失,它假定另一個應用正在被用來聽音頻,并且你的應用應該將自己終止。在實際的場景下,這意味著停止播放,移除媒體按鍵監聽,允許新的音頻播放器單獨處理這些事件,并放棄你的音頻焦點。這樣之后,在你恢復播放音頻之前你只能期望用戶的行為(如在你應用中按下播放鍵)。

在下面的代碼中,我們停止播放器或者我們的媒體播放對象,如果音頻焦點丟失是暫時的,另外恢復它當我們要恢復焦點時。如果焦點丟失是永久的,那么代碼會注銷我們的媒體按鍵時間接收器,并停止檢查音頻焦點變更。

      OnAudioFocusChangeListener afChangeListener = 
      
        new
      
      
         OnAudioFocusChangeListener() {

    
      
      
        public
      
      
        void
      
       onAudioFocusChange(
      
        int
      
      
         focusChange) {

        
      
      
        if
      
       (focusChange ==
      
         AUDIOFOCUS_LOSS_TRANSIENT

            
      
      
        //
      
      
         Pause playback
      
      

        } 
      
        else
      
      
        if
      
       (focusChange ==
      
         AudioManager.AUDIOFOCUS_GAIN) {

            
      
      
        //
      
      
         Resume playback 
      
      

        } 
      
        else
      
      
        if
      
       (focusChange ==
      
         AudioManager.AUDIOFOCUS_LOSS) {

            am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);

            am.abandonAudioFocus(afChangeListener);

            
      
      
        //
      
      
         Stop playback
      
      
                }

    }

};
      
    

對于允許 ducking 而丟失焦點的情況,那么你可以使用“ ducking ”而不是停止播放。


三). Duck!

Ducking 是降低你音頻外放的音量使得另一個應用的暫時性音頻更容易聽見,這樣就不用暫停你自己應用的播放了。

下面的代碼在暫時丟失焦點時降低我們播放器的音量,并在恢復焦點后,恢復音量。

      OnAudioFocusChangeListener afChangeListener = 
      
        new
      
      
         OnAudioFocusChangeListener() {

    
      
      
        public
      
      
        void
      
       onAudioFocusChange(
      
        int
      
      
         focusChange) {

        
      
      
        if
      
       (focusChange ==
      
         AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {

            
      
      
        //
      
      
         Lower the volume
      
      

        } 
      
        else
      
      
        if
      
       (focusChange ==
      
         AudioManager.AUDIOFOCUS_GAIN) {

            
      
      
        //
      
      
         Raise it back to normal
      
      
                }

    }

};
      
    

音頻焦點的丟失是要響應廣播中最重要的,但它不是唯一一個最重要的。系統會發送一系列的intent來讓你改變用戶的音頻體驗。下一節課將會講授如何監聽它們來提供用戶的音頻體驗。

【Android Developers Training】 45. 控制音頻焦點


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 三级毛片在线 | 五月婷婷色视频 | 一级片片 | 亚洲国产精品99久久久久久久久 | 久草国产在线观看 | 日本AAAA片毛片免费观 | 久久99精品视香蕉蕉 | 五月婷六月丁香狠狠躁狠狠爱 | 久久91精品国产91久久小草 | 欧美一区二区三区免费不卡 | 国产中文字幕在线播放 | 免费网站看v片在线a | 狠狠躁夜夜躁人人爽天天段 | 最新中文在线视频 | 激情一区 | av在线一区二区三区 | 天天看天天操 | 国产午夜三级一区二区三桃花影视 | 日韩在线欧美 | 成人午夜天堂 | 一区在线免费观看 | 亚洲精品aⅴ| 两女互慰磨豆腐视频在线观看 | 777奇米视频 | 久久中文视频 | 182tv在线观看国产路线一 | 毛片毛片毛片毛片毛片毛片 | 爱人同志国语免费观看全集 | 久久亚洲精品国产一区 | 亚洲精品一区二区 | 六月激情 | 欧美成人激情在线 | 亚洲人jizz日本人处 | 免费在线观看黄 | 91成人在线免费 | 国产伦精品一区二区三区高清 | 毛片免费大全短视频 | 超碰日韩 | 成人精品鲁一区一区二区 | 一级成人毛片免费观看欧美 | 国精品人妻无码一区二区三区性色 |