AudioManager:用来对音量大小,声音模式(静音,震动,震动加声音等模式)的管理, 还有用它来注册“插入耳机”时的广播接收者(Action: android.intent.action.MEDIA_BUTTON)
源码(没有Android源码的可以看下我之前的博文,有提供下载地址哈~)所在位置:
Android-4.0/frameworks/base/media/java/android/media/AudioManager.java
一. 首先在应用层面上分析下怎么使用这个类:
1.获取AudioManager实例对象
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
2.AudioManager能实现的一些基本的功能的函数介绍
adjustStreamVolume(int streamType, int direction, int flags)
/**
方法分析:(通过该方法可以控制特定的声音的音量)
用"步长"调整手机声音大小的函数(Adjusts the volume of a particular stream by one step in a direction.)
这个函数只能用于应用程序对Audio属性的设置或者通话(telephony)应用程序
streamType(表示要处理的声音是哪种):
能使用的streamType的值包括:
STREAM_VOICE_CALL(通话)
STREAM_SYSTEM(系统声音)
STREAM_RING(铃声)
STREAM_MUSIC(音乐)
STREAM_ALARM(闹铃)
direction(“方向”:顾名思义是要往上增加音量,往下减少音量,还是维持不变):
能使用的值有:
ADJUST_LOWER(降低)
ADJUST_RAISE(升高)
ADJUST_SAME(维持原来的)[呵~~呵]
flags(可选标志位):
flags One(单个参数) or more flags.(参数1|参数2|参数3..)
如下flag:
AudioManager.FLAG_SHOW_UI(显示出音量调节UI)
AudioManager.FLAG_ALLOW_RINGER_MODES
AudioManager.FLAG_PLAY_SOUND
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE
AudioManager.FLAG_VIBRATE
对应get方法:
getStreamVolume(int streamType)
最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”
*/
adjustVolume(int direction, int flags)
/**
方法分析:
系统智能地判断现在是要处理的是哪个类型的声音("通话音","媒体音"等)
如果你在打电话,这个时候这个函数相应处理的就是"通话音",而如果你在听歌,处理的就是“媒体音”~~平时其实用一些软件也是有这种感觉的哈~~
direction(“方向”:顾名思义是要往上增加音量,往下减少音量,还是维持不变):
能使用的值有:
ADJUST_LOWER(降低)
ADJUST_RAISE(升高)
ADJUST_SAME(维持原来的)[呵~~呵]
flags(可选标志位):
flags One(单个参数) or more flags.(参数1|参数2|参数3..)
如下flag:
AudioManager.FLAG_SHOW_UI(显示出音量调节UI)
AudioManager.FLAG_ALLOW_RINGER_MODES
AudioManager.FLAG_PLAY_SOUND
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE
AudioManager.FLAG_VIBRATE
*/
int getMode()
/**
方法分析:
得到声音的模式
返回值(int)对应的宏:
MODE_INVALID: 发生异常的时候返回
MODE_NORMAL: 普通模式
MODE_RINGTONE:铃声模式
MODE_IN_CALL: 通话模式
MODE_IN_COMMUNICATION:通话模式
对应set方法:
setMode(int mode)
*/
int getRingerMode()
/**
方法分析:
得到铃声设置的模式
返回值(int)对应的宏:
RINGER_MODE_NORMAL(铃声模式)
RINGER_MODE_SILENT(静音模式)
RINGER_MODE_VIBRATE(静音但是震动)
对应set方法(改变铃声模式):
setRingerMode(int ringerMode)
*/
getStreamMaxVolume(int streamType)
/**
方法分析:
得到手机最大的音量
*/
setStreamMute(int streamType, boolean state)
/**
方法分析:
让streamType指定的对应的声音流做处理
state为true表示让它静音,false表示不让它静音
如:让音乐静音
setStreamMute(AudioManager.STREAM_MUSIC , true);
*/
3.实例Demo代码
java代码
- //获取实例
- AudioManager audioManager = (AudioManager)
- getSystemService(AUDIO_SERVICE);
- //获取/设置系统音量
- audioManager.getStreamVolume(AudioManager.STREAM_SYSTEM);
- audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM,
- AudioManager.ADJUST_RAISE
- , AudioManager.FLAG_SHOW_UI);
- //获取/设置音乐音量
- audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
- audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
- AudioManager.ADJUST_RAISE
- , AudioManager.FLAG_SHOW_UI);
- //其他的类似
- //获取/设置铃声的模式
- int ringMode = audioManager.getRingerMode();
- //普通模式
- audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
- //静音模式
- audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
- //其他的类似
- //设置声音流静音/不静音
- //音乐静音
- audioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);
- //铃声不静音
- audioManager.setStreamMute(AudioManager.STREAM_RING, false);
- //其他的类似
复制代码