亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【Android Developers Training】 44. 控制你應(yīng)

系統(tǒng) 2383 0

注:本文翻譯自Google官方的Android Developers Training文檔,譯者技術(shù)一般,由于喜愛(ài)安卓而產(chǎn)生了翻譯的念頭,純屬個(gè)人興趣愛(ài)好。

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


一個(gè)良好的用戶體驗(yàn)是一種可預(yù)測(cè)的。如果你的應(yīng)用播放多媒體,那么很重要的一點(diǎn)就是你的用戶可以通過(guò)他們?cè)O(shè)備上的(藍(lán)牙耳機(jī),耳機(jī)等等)硬件或軟件音量控制方法,來(lái)調(diào)整應(yīng)用的音量。


一). 確定使用的是什么媒體流

要?jiǎng)?chuàng)建一個(gè)可預(yù)測(cè)的音頻體驗(yàn),第一步是要明確你的應(yīng)用要使用什么音頻流。

Android系統(tǒng)中,對(duì)于播放音樂(lè),鬧鈴,通知,來(lái)電鈴聲,系統(tǒng)提示音,按鍵音等都分別對(duì)應(yīng)不同的音頻流。這樣做的目的主要是可以讓用戶分別對(duì)不同的音頻流控制其音量。

大多數(shù)的這些音頻流被限制為系統(tǒng)級(jí)事件,所以除非你的應(yīng)用替代了鬧鈴,你才能使用 STREAM_MUSIC 流來(lái)播放你的音頻。


二). 使用硬件音量鍵來(lái)控制你的應(yīng)用音頻音量

默認(rèn)的,按下音量控制鍵會(huì)修改當(dāng)前激活的音頻流的音量。如果你的應(yīng)用現(xiàn)在沒(méi)有播放任何東西,那么按下音量鍵將會(huì)調(diào)整鈴聲音量。

如果你有一個(gè)游戲或者音樂(lè)音樂(lè),那么當(dāng)用戶希望修改游戲或音樂(lè)的音量時(shí),按下音量控制鍵是有效的,甚至用戶現(xiàn)在處于兩個(gè)音樂(lè)播放之間的間隔,或者在當(dāng)前的游戲所處位置沒(méi)有音樂(lè)在播放。

你可能很渴望嘗試監(jiān)聽音量鍵按下的事件,并且通過(guò)這種方式來(lái)修改你的音頻流的音量。放棄這種復(fù)雜的想法吧, Android提供了 setVolumeControlStream() 這個(gè)方法來(lái)直接調(diào)整你制定的音頻流的音量。

確定了你的應(yīng)用要使用的音頻流之后,你應(yīng)該將它設(shè)置為當(dāng)前音量流目標(biāo)。你應(yīng)該在你應(yīng)用生命周期的早期調(diào)用響應(yīng)的方法,因?yàn)槟阒恍枰贏ctivity整個(gè)生命周期中調(diào)用它一次,你應(yīng)該在控制你的媒體的 Activity 或者 Fragment onCreate()方法中調(diào)用它。這樣可以保證不管你的應(yīng)用當(dāng)前是否是可見的,音量控制表現(xiàn)的將會(huì)與用戶期望的一致。

      setVolumeControlStream(AudioManager.STREAM_MUSIC);
    

從現(xiàn)在開始,按下設(shè)備的音量鍵將會(huì)影響你特定的音頻流(此例中為“ music ”),不管目標(biāo)activity或fragment是否是可見的。


三). 使用硬件的播放控制鍵老控制你的應(yīng)用的音頻播放

媒體播放按鈕,比如播放、暫停、停止、跳過(guò)、回放鍵在一些手持設(shè)備或其他有限設(shè)備上面還是有的。當(dāng)用戶按下一個(gè)或其他這類硬件按鍵時(shí),系統(tǒng)會(huì)廣播一個(gè)具有 ACTION_MEDIA_BUTTON 行為的intent。

要響應(yīng)媒體按鈕的點(diǎn)擊事件,你需要在你的清單文件中注冊(cè)一個(gè)廣播接收器( BroadcastReceiver ),來(lái)監(jiān)聽這一行為的廣播,如下所示:

      
        <
      
      
        receiver 
      
      
        android:name
      
      
        =".RemoteControlReceiver"
      
      
        >
      
      
        <
      
      
        intent-filter
      
      
        >
      
      
        <
      
      
        action 
      
      
        android:name
      
      
        ="android.intent.action.MEDIA_BUTTON"
      
      
        />
      
      
        </
      
      
        intent-filter
      
      
        >
      
      
        </
      
      
        receiver
      
      
        >
      
    

這個(gè)接收器的實(shí)現(xiàn)需要提取出造成這個(gè)廣播所按下的鍵是哪個(gè)。廣播的 Intent 會(huì)在 EXTRA_KEY_EVENT 鍵中包含這一信息,同時(shí)在 KeyEvent 類中包含了一系列的“ KEYCODE_MEDIA_* ”靜態(tài)常量,來(lái)表示每一個(gè)可能按下的多媒體按鍵,如: KEYCODE_MEDIA_PLAY_PAUSE KEYCODE_MEDIA_NEXT

下面的代碼展示了如何提取出是哪個(gè)多媒體按鈕暗下了,并對(duì)媒體播放做出相應(yīng)的操作:

      
        public
      
      
        class
      
       RemoteControlReceiver 
      
        extends
      
      
         BroadcastReceiver {

    @Override

    
      
      
        public
      
      
        void
      
      
         onReceive(Context context, Intent intent) {

        
      
      
        if
      
      
         (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {

            KeyEvent event 
      
      =
      
         (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);

            
      
      
        if
      
       (KeyEvent.KEYCODE_MEDIA_PLAY ==
      
         event.getKeyCode()) {

                
      
      
        //
      
      
         Handle key press.
      
      
                    }

        }

    }

}
      
    

因?yàn)榇蠖鄶?shù)應(yīng)用可能希望監(jiān)聽多媒體按鍵按下的事件,當(dāng)你的應(yīng)用希望接收媒體按鍵按下的事件時(shí), 你也必須 從代碼上控制多媒體。

下面的代碼通過(guò)使用 AudioManager 來(lái)注冊(cè)或者注銷你的媒體按鍵事件接收器,這可以用在你的應(yīng)用中。當(dāng)注冊(cè)了以后,你的廣播接收器將會(huì)是唯一的,監(jiān)聽所有的媒體按鈕廣播的接收器:

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

...




      
      
        //
      
      
         Start listening for button presses
      
      
        am.registerMediaButtonEventReceiver(RemoteControlReceiver);

...




      
      
        //
      
      
         Stop listening for button presses
      
      

am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
    

通常情況下,應(yīng)用應(yīng)該在他們變成非激活狀態(tài)或不可見時(shí)(比如在 onStop() 回調(diào)函數(shù)階段),注銷他們的接收器。然而,對(duì)于播放應(yīng)用來(lái)說(shuō),事情沒(méi)有那么簡(jiǎn)單。事實(shí)上,因?yàn)楫?dāng)你的應(yīng)用不可見或者不能在當(dāng)前屏幕的UI界面被控制,時(shí)還能響應(yīng)媒體按鍵的事件時(shí)很重要的。

一個(gè)更好的方法是在你的應(yīng)用獲取和丟失音頻焦點(diǎn)時(shí),注冊(cè)或注銷媒體按鈕事件接收器。

【Android Developers Training】 44. 控制你應(yīng)用的音量和播放


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 99久久做夜夜爱天天做精品 | 七次郎在线视频精品视频 | 亚洲欧美另类在线视频 | 国产成人亚洲欧美三区综合 | 亚洲欧美日韩精品久久久 | 四虎影院永久网站 | 天天干天天插 | 亚洲 中文 欧美 日韩 在线人 | 日韩av成人| 99精品免费在线观看 | 奇米奇米色 | 亚洲一区二区三区高清 | 久热久草| 亚洲国产人成中文幕一级二级 | 中文字幕在线视频精品 | 欧美日韩亚洲m码色帝国 | 久久99影院网久久久久久 | 国产日产欧产麻豆精品精品推荐 | 毛片观看网址 | 日韩欧美伊人久久大香线蕉 | 国产精品 视频一区 二区三区 | 91精品国产乱码久久久久久 | 国产成人毛片精品不卡在线 | 深夜福利在线免费观看 | 国产欧美一区二区精品性色 | 色久综合网 | 亚洲欧美日韩国产色另类 | 国产一区中文字幕在线观看 | 国产成人精视频在线观看免费 | 日本一级在线播放线观看视频 | 成人亚洲网 | 欧美日韩亚洲第一页 | 神马在线影视我不卡 | 欧美性性性性性色大片 | 日韩 欧美 自拍 在线 视频 | 美女bbxx美女bbb| 亚洲麻豆国产精品 | 国产羞羞羞视频在线观看 | 亚洲精品久久一区影院 | 亚洲精品久久久久中文字幕一区 | 一级毛片一级片 |