Android的音量管理用的是AudioManager类。这个类可以设置声音是用手机扬声器还是手机耳机,音响的大小等功能。其用法比较单一,所以将这些功能封装进一个单例模式的工具类以便使用。
这里整理了一下AudioManager常用的各种常量:
streamType类型:(音量类型)
- STREAM_ALARM 提示音
- STREAM_MUSIC 音乐媒体音
- STREAM_NOTIFICATION 通知栏音频,
- STREAM_RING 铃声
- STREAM_SYSTEM 系统
- STREAM_VOICE_CALL 通话
- STREAM_DTMF 双音多频
direction类型:(音量大小)
- ADJUST_LOWER 降低音量
- ADJUST_RAISE 升高音量
- ADJUST_SAME 保持不变
flags类型:(变动时的表现)
FLAG_PLAY_SOUND 调整音量时播放声音
FLAG_SHOW_UI 调整音量时会显示系统的音量界面
0 表示什么都不做
public class AudioHelper {
private AudioHelper(Context context) {
initAudioManager(context);
}
public synchronized static AudioHelper getInstance(Context context) {
if (INSTANCE == null)
INSTANCE = new AudioHelper(context);
return INSTANCE;
}
private static AudioHelper INSTANCE;
private Context context;
private AudioManager audioManager;
/**
* 初始化音频管理器
*/
private void initAudioManager(Context context) {
this.context = context.getApplicationContext();
audioManager = (AudioManager) this.context.getSystemService(Context.AUDIO_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
} else {
audioManager.setMode(AudioManager.MODE_IN_CALL);
}
audioManager.setSpeakerphoneOn(true);//默认为扬声器播放
}
/**
* 设置是否使用扬声器
*
* @param speakerMode true为使用扬声器,false为使用耳机
*/
public void speakerhoneSwitch(boolean speakerMode) {
audioManager.setSpeakerphoneOn(speakerMode);
}
/**
* 获取音频流的最大音量
*
* @param streamType 音频流类型
*/
public int getMaxVolume(int streamType) {
return audioManager.getStreamMaxVolume(streamType);
}
/**
* 获取音频流的当前音量
*
* @param streamType 音频流类型
*/
public int getCurrentVolume(int streamType) {
return audioManager.getStreamVolume(streamType);
}
/**
* 获取播放音乐时的最大音响
*/
public int getMusicMaxVolume() {
return getMaxVolume(AudioManager.STREAM_MUSIC);
}
/**
* 获取铃声的最大音响
*/
public int getRingMaxVolume() {
return getMaxVolume(AudioManager.STREAM_RING);
}
/**
* 获取提示音的最大音响
*/
public int getAlamMaxVolume() {
return getMaxVolume(AudioManager.STREAM_ALARM);
}
/**
* 获取通知的最大音响
*/
public int getNotificationMaxVolume() {
return getMaxVolume(AudioManager.STREAM_NOTIFICATION);
}
/**
* 获取系统音的最大音响
*/
public int getSystemMaxVolume() {
return getMaxVolume(AudioManager.STREAM_SYSTEM);
}
/**
* 获取通话的最大音响
*/
public int getVoiceCallMaxVolume() {
return getMaxVolume(AudioManager.STREAM_VOICE_CALL);
}
/**
* 获取双音频的最大音响
*/
public int getDTMFMaxVolume() {
return getMaxVolume(AudioManager.STREAM_DTMF);
}
/**
* 直接设置音响大小
*
* @param streamType 音频类类型
* @param volume 音频大小
*/
public void setVolume(int streamType, int volume) {
volume = (volume > getMaxVolume(streamType)) ? getMaxVolume(streamType) : volume;
audioManager.setStreamVolume(streamType,
volume,
AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
}
/**
* 调大音量
*
* @param streamType 音频类类型
*/
public void raiseVolume(int streamType) {
int currentVolume = getCurrentVolume(streamType);
if (currentVolume < getMaxVolume(streamType)) {
audioManager.adjustStreamVolume(streamType,
AudioManager.ADJUST_RAISE,
AudioManager.FLAG_PLAY_SOUND | AudioManager.FLAG_SHOW_UI);
}
}
/**
* 调小音量
*/
public void lowerVolume(int streamType) {
int currentVolume = getCurrentVolume(streamType);
if (currentVolume > 0) {
audioManager.adjustStreamVolume(streamType,
AudioManager.ADJUST_LOWER,
AudioManager.FLAG_SHOW_UI);
}
}
public void raiseMusicVolume() {
raiseVolume(AudioManager.STREAM_MUSIC);
}
public void lowerMusicVolume() {
lowerVolume(AudioManager.STREAM_MUSIC);
}
}
点击链接加入群聊【口袋里的安卓】:https://jq.qq.com/?_wv=1027&k=5z4fzdT
网友评论