在Android中翘簇,是有幾種類型的音量可以調(diào)節(jié):
STREAM_ALARM 警報(bào)
STREAM_MUSIC 音樂回放即媒體音量
STREAM_RING 鈴聲
STREAM_SYSTEM 系統(tǒng)
STREAM_VOICE_CALL 通話
代碼展示
private void initVolume() {
//獲取系統(tǒng)的Audio管理者
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
//最大音量
mediaMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//當(dāng)前音量
mediaVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
//seekbar設(shè)置最大值為最大音量
mCarVolume.setMax(mediaMaxVolume);
//seekbar設(shè)置當(dāng)前進(jìn)度為當(dāng)前音量
setView();
mCarVolume.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//設(shè)置媒體音量為當(dāng)前seekbar進(jìn)度
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
mediaVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
setView();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
private void setView() {
Log.e("ccm=======>", "mediaVolume: " + mediaVolume);
mCarVolume.setProgress(mediaVolume);
}
/*
* 事件會在用戶按下一個鍵盤按鍵時發(fā)生
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (--mediaVolume >= 0) {
setView();
} else {
mediaVolume = 0;
}
return true;
case KeyEvent.KEYCODE_VOLUME_UP:
if (++mediaVolume <= mediaMaxVolume) {
setView();
} else {
mediaVolume = mediaMaxVolume;
}
return true;
case KeyEvent.KEYCODE_VOLUME_MUTE:
setView();
return true;
}
return super.onKeyDown(keyCode, event);
}
布局展示
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:padding="20dp"
android:orientation="vertical">
<SeekBar
android:id="@+id/car_volume"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
工具類
/**
* 音量工具類
*/
public class VolumeUtil {
private AudioManager mAudioManager;
public VolumeUtil(){}
//獲取系統(tǒng)的Audio管理者
public VolumeUtil(Context context){
mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE);
}
//獲取最大多媒體音量
public int getMediaMaxVolume(){
Log.e("ccm=======>", "getMediaMaxVolume: " + mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC));
return mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
}
//獲取當(dāng)前多媒體音量
public int getMediaVolume(){
Log.e("ccm=======>", "getMediaVolume: " +mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC ));
return mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
}
//獲取最大通話音量
public int getCallMaxVolume(){
return mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
}
//獲取當(dāng)前通話音量
public int getCallVolume(){
return mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
}
//獲取最大系統(tǒng)音量
public int getSystemMaxVolume(){
return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM );
}
//獲取當(dāng)前系統(tǒng)音量
public int getSystemVolume(){
return mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM );
}
//獲取最大提示音量
public int getAlermMaxVolume(){
return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM );
}
//獲取當(dāng)前提示音量
public int getAlermVolume(){
return mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM );
}
// 設(shè)置多媒體音量
public void setMediaVolume(int volume){
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, //音量類型
volume,
AudioManager.FLAG_PLAY_SOUND
| AudioManager.FLAG_SHOW_UI);
}
//設(shè)置通話音量
public void setCallVolume(int volume){
mAudioManager.setStreamVolume( AudioManager.STREAM_VOICE_CALL,
volume,
AudioManager.FLAG_PLAY_SOUND
| AudioManager.FLAG_SHOW_UI);
}
//設(shè)置提示音量
public void setAlermVolume(int volume){
mAudioManager.setStreamVolume( AudioManager.STREAM_ALARM,
volume,AudioManager.FLAG_PLAY_SOUND
|AudioManager.FLAG_SHOW_UI);
}
// 關(guān)閉/打開揚(yáng)聲器播放
public void setSpeakerStatus(boolean on) {
if (on) { //揚(yáng)聲器
mAudioManager.setSpeakerphoneOn(true);
mAudioManager.setMode(AudioManager.MODE_NORMAL);
} else {
// 設(shè)置最大音量
int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, max, AudioManager.STREAM_VOICE_CALL);
// 設(shè)置成聽筒模式
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
mAudioManager.setSpeakerphoneOn(false);// 關(guān)閉揚(yáng)聲器
mAudioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);
}
}
}