AudioManager主要是用来控制声音的音量和响铃模式。
获取音量
获取AudioManager:
1 | //获取系统的Audio管理者 |
可以调节音量的声音分类:
- STREAM_VOICE_CALL:通话声音
- STREAM_SYSTEM:系统声音,包括按键声音等
- STREAM_RING:来电响铃
- STREAM_MUSIC:媒体声音(包括音乐,视频,游戏声音)
- STREAM_ALARM:闹钟声音
- STREAM_NOTIFICATION:通知声音
获取对应的音量:
1 | //最大音量 |
控制音量
音量控制有两种方式:
一种是渐进式,即像手动按音量键一样,一步一步增加或减少,并通过AudioManager的adjustStreamVolume方法:
1 | public void adjustStreamVolume(int streamType, int direction, int flags) { |
streamType:需要调整的音量类型
direction:调整的方向,加或者减。
1 | ADJUST_LOWER 降低音量 |
flags:附加的一些参数
1 | FLAG_PLAY_SOUND 调整音量时播放声音 |
二是直接自定义调节的幅度,使用setStreamVolume方法:
1 | public void setStreamVolume(int streamType, int index, int flags) { |
index: 把音量调整到index值
设置声音模式
声音模式主要有3类:
- RINGER_MODE_NORMAL:正常模式
所有声音都正常,包括系统声音,来电响铃,媒体声音,闹钟,通知声音都有 - RINGER_MODE_SILENT:静音模式
该模式下,来电响铃,通知,系统声音和震动都没有;闹钟,通话声音保持;大部分手机媒体声音依然有,但是小米和少部分oppo手机在设置静音的同时会将媒体声音自动调整为0,此时没有媒体声音。 - RINGER_MODE_VIBRATE:震动模式
该模式下,来电,通知保持震动没有声音;但是媒体,闹钟依然有声音。不过小米手机只有正常模式和静音模式,没有震动模式
设置声音模式的方法主要是setRingerMode和getRingerMode:
1 | public void setRingerMode(int ringerMode) { |
同时在声音模式改版之后,会受到系统广播,其action = RINGER_MODE_CHANGED_ACTION,extra = EXTRA_RINGER_MODE。
其他控制
- setSpeakerphoneOn(boolean on):控制扬声器开或者关
- isSpeakerphoneOn():判断当前扬声器是开还是关
- setMicrophoneMute(boolean on):设置麦克风静音开或者关
- isMicrophoneMute():判断麦克风是否静音
- isWiredHeadsetOn():检查是否插入耳机