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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android音樂編程:控制應(yīng)用程序的音量和播放

識別音頻流

創(chuàng)造優(yōu)秀音頻體驗(yàn)的***步是了解您的應(yīng)用程序?qū)⑹褂玫囊纛l流類型。

Android 系統(tǒng)保持相互獨(dú)立的音頻流通道來播放音樂,報(bào)警,通知,來電鈴聲,系統(tǒng)聲音,呼叫(通話)音量,和 DTMF 音調(diào)(鍵盤撥號)。

這樣做主要是為了使用戶能夠獨(dú)立地控制每個(gè)流的音量。

多數(shù)的流僅限于系統(tǒng)事件,所以,除非您的應(yīng)用程序是要更換鬧鐘,否則幾乎可以肯定的是使用 STREAM_MUSIC 音頻流。

使用硬件音量按鍵來控制應(yīng)用程序的音量

默認(rèn)情況下,按音量鍵控制修改當(dāng)前獲得焦點(diǎn)的音頻流的音量。假如您的應(yīng)用程序當(dāng)前不是正在播放音樂,或者沒有運(yùn)行,那么音量鍵將會調(diào)整振鈴的音量。

如果您有一個(gè)游戲或音樂應(yīng)用程序,當(dāng)用戶點(diǎn)擊音量鍵的時(shí)候,即使他們目前正在瀏覽歌曲,或者沒有停留在當(dāng)前的音樂游戲的位置,他們?nèi)匀幌M刂朴螒蚧蛞魳返囊袅俊?/p>

您可以通過接收音量控制鍵的按鍵消息來修改當(dāng)前的音頻流音量。不過不用那么麻煩 ,Android 已經(jīng)提供了方便的 setVolumeControlStream() 方法來根據(jù)您指定的音頻流來自動調(diào)節(jié)音量。

首先確定您的應(yīng)用程序?qū)⑹褂玫囊纛l流,然后通過 setVolumeControlStream 方法設(shè)置其為當(dāng)前焦點(diǎn)的音頻流。

這個(gè)方法應(yīng)該被及早調(diào)用,并且在生命周期中只需要調(diào)用一次即可,所以通常應(yīng)在 Activity 或者 Fragment 的 OnCreate() 內(nèi) 調(diào)用。

這將確保只要你的應(yīng)用程序是可見狀態(tài)的,音量控制功能就是用戶所期望的效果(即控制當(dāng)前應(yīng)用程序的音量)。

代碼示例:

 
 
 
  1. setVolumeControlStream(AudioManager.STREAM_MUSIC);  

從現(xiàn)在開始,按設(shè)備上的音量鍵將影響您指定的(示例“音樂”)的音頻流。

使用硬件播放控制按鍵來控制應(yīng)用程序的音頻播放

很多手機(jī)和許多無線耳機(jī)都附帶有媒體播放控制按鈕,如播放,暫停,停止,跳過。每當(dāng)用戶按下這些硬件鍵,系統(tǒng)就會廣播 ACTION_MEDIA_BUTTON  動作。

為了響應(yīng)媒體按鈕的點(diǎn)擊事件,您需要注冊 BroadcastReceiver 來監(jiān)聽廣播。

代碼示例:

 
 
 
  1.  
  2.    
  3.       
  4.    
  5.  

Receiver 中需要知道到底是按下了哪個(gè)鍵的具體信息,Intent 中包括了 EXTRA_KEY_EVENT 鍵值,可以通過它來取得KeyEvent 類型的值 ,KeyEvent中的KEYCODE_MEDIA_*靜態(tài)常量表示了所有的媒體按鈕類型,如 KEYCODE_MEDIA_PLAY_PAUSE 和 KEYCODE_MEDIA_NEXT 等等。

代碼示例:

 
 
 
  1. public class RemoteControlReceiver extends BroadcastReceiver { 
  2.   @Override 
  3.   public void onReceive(Context context, Intent intent) { 
  4.     if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { 
  5.       KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
  6.       if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) { 
  7.         // Handle key press. 
  8.         // 處理播放按鍵的消息 
  9.       } 
  10.    } 
  11.  } 

因?yàn)槎鄠€(gè)應(yīng)用程序可能會接聽和響應(yīng)媒體按鍵消息,您必須以編程方式控制您的應(yīng)用程序何時(shí)應(yīng)該接受媒體按鈕事件。

在您的應(yīng)用程序中可以使用 AudioManager  來注冊和取消注冊媒體按鈕的事件接收器,注冊時(shí),使用您的專用事件接收器。

示例代碼 :

AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...
// Start listening for button presses 開始 監(jiān) 聽
am.registerMediaButtonEventReceiver(RemoteControlReceiver);
...
// Stop listening for button presses 取消 監(jiān) 聽
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);

通常情況下,應(yīng)用程序在失去焦點(diǎn)或不在屏幕顯示隱藏到后臺的時(shí)候, 應(yīng)注銷其大部分的接聽器(如在 onStop() 回調(diào)函數(shù)中) 。

然而,對于媒體播放應(yīng)用程序卻沒有這么簡單,事實(shí)上,最重要的是,當(dāng)您的應(yīng)用程序是處于不可見的狀態(tài)時(shí),此時(shí)不能由屏幕上的 UI 控制,但是仍然需要響應(yīng)媒體播放控制按鈕(最典型的就是后臺播放音樂) 。

所以,一個(gè)更好的方法是:當(dāng)您的應(yīng)用程序獲得和失去音頻焦點(diǎn)的時(shí)候分別注冊和注銷媒體按鈕的事件接收器,而不僅僅是依賴于應(yīng)用程序的界面狀態(tài) 。

具體方案請參考下一節(jié)課程。

參考文摘:

https://developer.android.com/training/managing-audio/volume-playback.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%E6%8E%A7%E5%88%B6%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E9%9F%B3%E9%87%8F%E5%92%8C%E6%92%AD%E6%94%BE/


標(biāo)題名稱:Android音樂編程:控制應(yīng)用程序的音量和播放
文章來源:http://www.5511xx.com/article/dhosccp.html