標簽(空格分隔): Android基礎入門教程
在多媒體的第1節,我們用SoundPool寫了個Duang的示例,小豬點擊1個按鈕后,突然發出”Duang”的
1聲,而且當時的聲音很大,嚇死寶寶了,好在不是上班時間,上班時間偷偷寫博客給經理知道
會作死的~嗯,好的,說到這個聲音大小就得介紹下Android為我們提供的(音量大小控制)的API:
AudioManager(音頻管理器)了,該類位于Android.Media包下,提供了音量控制與鈴聲模式相干操作!
本節我們就來學下這個東東的用法,你可以寫1個Demo,1個簡單的靜音,每次看小電影之前,先
進Demo點下靜音,然后,說說而已哈~嗯,話不多說,開始本節內容!
官方API文檔:AudioManager
AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
經常使用方法:
- adjustVolume(int direction, int flags):
控制手機音量,調大或調小1個單位,根據第1個參數進行判斷
AudioManager.ADJUST_LOWER,可調小1個單位;
AudioManager.ADJUST_RAISE,可調大1個單位- adjustStreamVolume(int streamType, int direction, int flags):
同上,不過可以選擇調理的聲音類型
1)streamType參數,指定聲音類型,有下述幾種聲音類型:
STREAM_ALARM:手機鬧鈴 STREAM_MUSIC:手機音樂
STREAM_RING:電話鈴聲 STREAM_SYSTEAM:手機系統
STREAM_DTMF:音調 STREAM_NOTIFICATION:系統提示
STREAM_VOICE_CALL:語音電話
2)第2個參數和上面那個1樣,調大或調小音量的
3)可選的標志位,比如AudioManager.FLAG_SHOW_UI,顯示進度條,AudioManager.PLAY_SOUND:播放聲音- setStreamVolume(int streamType, int index, intflags):直接設置音量大小
- getMode( ):返回當前的音頻模式
- setMode( ):設置聲音模式
有下述幾種模式:
MODE_NORMAL(普通), MODE_RINGTONE(鈴聲),
MODE_IN_CALL(打電話),MODE_IN_COMMUNICATION(通話)- getRingerMode( ):返回當前的鈴聲模式
- setRingerMode(int streamType):設置鈴聲模式
有下述幾種模式:
如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(靜音)、RINGER_MODE_VIBRATE(震動)- getStreamVolume(int streamType):
取得手機確當前音量,最大值為7,最小值為0,當設置為0的時候,會自動調劑為震動模式- getStreamMaxVolume(int streamType):取得手機某個聲音類型的最大音量值
- setStreamMute(int streamType,boolean state):將手機某個聲音類型設置為靜音
- setSpeakerphoneOn(boolean on):設置是不是打開擴音器
- setMicrophoneMute(boolean on):設置是不是讓麥克風靜音
- isMicrophoneMute():判斷麥克風是不是靜音或是不是打開
- isMusicActive():判斷是不是有音樂處于活躍狀態
- isWiredHeadsetOn():判斷是不是插入了耳機
其他方法:
- abandonAudioFocus(AudioManager.OnAudioFocusChangeListenerl):放棄音頻的焦點
- adjustSuggestedStreamVolume(int,int suggestedStreamType intflags):
調劑最相干的流的音量,或給定的回退流- getParameters(String keys):給音頻硬件設置1個varaible數量的參數值
- getVibrateSetting(int vibrateType):返回是不是該用戶的振動設置為振動類型
- isBluetoothA2dpOn():檢查是不是A2DP藍牙耳機音頻路由是打開或關閉
- isBluetoothScoAvailableOffCall():顯示當前平臺是不是支持使用SCO的關閉調用用例
- isBluetoothScoOn():檢查通訊是不是使用藍牙SCO
- loadSoundEffects():加載聲音效果
- playSoundEffect((int effectType, float volume):播放聲音效果
- egisterMediaButtonEventReceiver(ComponentName eventReceiver):
注冊1個組件MEDIA_BUTTON意圖的唯1接收機- requestAudioFocus(AudioManager.OnAudioFocusChangeListener l,int streamType,int durationHint)
要求音頻的焦點- setBluetoothScoOn(boolean on):要求使用藍牙SCO耳機進行通訊
- startBluetoothSco/stopBluetoothSco()():啟動/停止藍牙SCO音頻連接
- unloadSoundEffects():卸載音效
嘿嘿,屬性蠻多的,有些還觸及到藍牙這些東東,這里我們只講授最多見的1些方法!
遇到1些特殊的沒見過的,我們再來查文檔!
簡單的示例:使用Mediaplayer播放音樂,通過AudioManager調理音量大小與靜音!
對了,先在res下創建1個raw的文件夾,往里面丟1個MP3資源文件!
運行效果圖:
代碼實現:
布局代碼activity_main.xml:
MainActivity.java:
代碼還是非常簡單的,另外設置靜音的方法setStreamMute()在API 23版本過期,
可使用另外一個方法adjustStreamVolume(int, int, int),然后第3個屬性設置:
ADJUST_MUTE or ADJUST_UNMUTE!
對了,還有:
如果adjustStreamVolume()的第3個參數你設置了振動(Vibrator),
需要在AndroidManifest.xml中添加這個權限哦!
<uses-permission android:name=”android.permission.VIBRATE”/>
AudioManagerDemo.zip
好的,本節給大家演示了AudioManager用于調理音量的1個簡單用法,這個類筆者也不經常使用
到,以后如果有甚么新get的技能再加上吧~嘿嘿,靜音Demo寫好沒?要結合實際需求哈~![]()
另外,本周博客可能不會更新得太頻繁,本周要把公司的WebSocket庫替換掉,有得頭痛了~
好的,就說這么多,謝謝~