Android audioManager
AudioManager provides access to volume and ringer mode control.
獲取對象
Use Context.getSystemService(Context.AUDIO_SERVICE)
to get an instance of this class.
AudioManager mAudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
//通話音量
int max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
int current = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
Log.d(“VIOCE_CALL”, “max : ” + max + ” current : ” + current);
//系統音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM );
Log.d(“SYSTEM”, “max : ” + max + ” current : ” + current);
//鈴聲音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_RING );
Log.d(“RING”, “max : ” + max + ” current : ” + current);
//音樂音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
Log.d(“MUSIC”, “max : ” + max + ” current : ” + current);
//提示聲音音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_ALARM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_ALARM );
Log.d(“ALARM”, “max : ” + max + ” current : ” + current);
獲取當前正在播放音頻的硬件信息
if (isBluetoothA2dpOn()) {
// Adjust output for Bluetooth. 藍牙設備 }
else if (isSpeakerphoneOn()) {
// Adjust output for Speakerphone. 內置揚聲器(免提) }
else if (isWiredHeadsetOn()) {
// Adjust output for headsets 有線耳機 }
else {
// If audio plays and noone can hear it, is it still playing? 未知設備 }
出現硬件設備切換的時候,Android 會發送系統廣播 ACTION_AUDIO_BECOMING_NOISY ,您的應用程序中應該注冊一個 BroadcastReceiver 來監聽這個消息,當出現這種情況的時候,如果正在聽音樂,較好的設計方案是暫停當前音樂的播放,如果正在玩游戲,那么盡量降低游戲的音量是個不錯的解決方法。
幾個比較常用到的方法:
方法1:adjustVolume(int direction, int flags)
解釋:這個方法用來控制手機音量大小,當傳入的第一個參數為 AudioManager.ADJUST_LOWER 時,可將音量調小一個單位,傳入 AudioManager.ADJUST_RAISE 時,則可以將音量調大一個單位。
方法2:getMode()
解釋:返回當前音頻模式。
方法3:getRingerMode()
解釋:返回當前的鈴聲模式。
方法4:getStreamVolume(int streamType)
解釋:取得當前手機的音量,最大值為7,最小值為0,當為0時,手機自動將模式調整為“震動模式”。
注意: 分為9個單位 靜音(0),震動(0),1----7 九個等級。從靜音調為1時,需要調大兩個等級.
方法5:setRingerMode(int ringerMode)
解釋:改變鈴聲模式
//聲音模式
AudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
//靜音模式
AudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
//震動模式
AudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
//打開揚聲器
audioManager.setMode(AudioManager.ROUTE_SPEAKER);
currVolume = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
if(!audioManager.isSpeakerphoneOn()) {
audioManager.setSpeakerphoneOn(true);
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL ),
AudioManager.STREAM_VOICE_CALL);
}
// 關閉揚聲器
if(audioManager.isSpeakerphoneOn()) {
audioManager.setSpeakerphoneOn(false);
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,currVolume,
AudioManager.STREAM_VOICE_CALL);
}