音量类型
android系统中存在不同的音量设置。在应用层可做设置的,整理有如下五种
流类型 | 最大音量 | 最小音量 | 默认音量 | 含义 |
STREAM_VOICE_CALL | 5 | 1 | 4 | 通话音量 |
STREAM_RING | 7 | 0 | 5 | 铃声、通知音量等 |
STREAM_MUSIC | 15 | 0 | 5 | 多媒体音量 |
STREAM_ALARM | 7 | 0 | 6 | 闹钟音量 |
STREAM_BLUETOOTH_SCO | 15 | 0 | 7 | 蓝牙音量 |
以下工具类可以获取制定音量类型的最大 最小或当前音量值。也可以设置指定音量值。
import android.app.Service;
import android.content.Context;
import android.media.AudioManager;
/**
* 音量工具类
*/
public class VolumeUtil {
private AudioManager mAudioManager;
private VolumeUtil(){}
public VolumeUtil(Context context){
mAudioManager = (AudioManager) context.getSystemService(Service.AUDIO_SERVICE);
}
//获取最大多媒体音量
public int getMediaMaxVolume(){
return mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
}
//获取当前多媒体音量
public int getMediaVolume(){
return mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
}
//获取最大通话音量
public int getCallMaxVolume(){
return mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
}
//获取当前通话音量
public int getCallVolume(){
return mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
}
//获取最大系统音量
public int getSystemMaxVolume(){
return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM );
}
//获取当前系统音量
public int getSystemVolume(){
return mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM );
}
//获取最大提示音量
public int getAlermMaxVolume(){
return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM );
}
//获取当前提示音量
public int getAlermVolume(){
return mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM );
}
// 设置多媒体音量
public void setMediaVolume(int volume){
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, //音量类型
volume,
AudioManager.FLAG_PLAY_SOUND
| AudioManager.FLAG_SHOW_UI);
}
//设置通话音量
public void setCallVolume(int volume){
mAudioManager.setStreamVolume( AudioManager.STREAM_VOICE_CALL,
volume,
AudioManager.FLAG_PLAY_SOUND
| AudioManager.FLAG_SHOW_UI);
}
//设置提示音量
public void setAlermVolume(int volume){
mAudioManager.setStreamVolume( AudioManager.STREAM_ALARM,
volume,AudioManager.FLAG_PLAY_SOUND
|AudioManager.FLAG_SHOW_UI);
}
// 关闭/打开扬声器播放
public void setSpeakerStatus(boolean on) {
if (on) { //扬声器
mAudioManager.setSpeakerphoneOn(true);
mAudioManager.setMode(AudioManager.MODE_NORMAL);
} else {
// 设置最大音量
int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);
mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, max, AudioManager.STREAM_VOICE_CALL);
// 设置成听筒模式
mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
mAudioManager.setSpeakerphoneOn(false);// 关闭扬声器
mAudioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);
}
}
}
在以上代码中有个方法mAudioManager.setStreamVolume方法,对应的参数解释如下
/**
参数1:音量类型
参数2:音量数值
参数3:
AudioManager.FLAG_SHOW_UI 调整音量时显示系统音量进度条 , 0 则不显示
AudioManager.FLAG_ALLOW_RINGER_MODES 是否铃声模式
AudioManager.FLAG_VIBRATE 是否震动模式
AudioManager.FLAG_SHOW_VIBRATE_HINT 震动提示
AudioManager.FLAG_SHOW_SILENT_HINT 静音提示
AudioManager.FLAG_PLAY_SOUND 调整音量时播放声音
**/
mAudioManager.setStreamVolume(int streamType, int index, int flags);