设置android电话震动,Android音量控制-AudioManager与来电振动
AudioManager是Android系统级服务,通过AudioManager可以管理响铃,通知,闹钟,音乐,通话,系统等音频流的音量大小。音量调节常用的音频流类型如下:STREAM_RING:响铃STREAM_MUSIC:音乐STREAM_ALARM:闹钟STREAM_VOICE_CALL:通话STREAM_SYSTEM:系统(拨号键盘提示音、触摸提示音、锁屏提示音)STREAM_NOTIFI
AudioManager是Android系统级服务,通过AudioManager可以管理响铃,通知,闹钟,音乐,通话,系统等音频流的音量大小。
音量调节
常用的音频流类型如下:
STREAM_RING:响铃
STREAM_MUSIC:音乐
STREAM_ALARM:闹钟
STREAM_VOICE_CALL:通话
STREAM_SYSTEM:系统(拨号键盘提示音、触摸提示音、锁屏提示音)
STREAM_NOTIFIACTION:通知
一般情况下,如果需要更改某一个音频流音量大小,可以通过如下的方式:
//获得一个AudioManager的实例
final AudioManager audioManager = mContext.getSystemService(Context.ALARM_SERVICE);
//获得闹钟音频流的最大音量(设置的音量只能小于最大音量)
final int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM);
//更改闹钟音量
audioManager.setStreamVolume(AudioManager.STREAM_ALARM,maxVolume/2,AudioManager.FLAG_PLAY_SOUND);
需要注意的是如果音频流是固定的,那么调用上列方法也是无法修改音量的。可以调用 AudioManager 实例的 isVolumeFixed() 方法进行判断。
同时,setStreamVolume方法还支持一些特定的FLAG值,使用 | 将不同的模式组合,在设置音量的时候触发,例如:AudioManager.FLAG_VIBRATE|AudioManager.FLAG_PLAY_SOUND设置时会振动和播放响应的音频流预览。更多的FLAG可以在 AudioManager 类里面查看。
此外,还有几个增减音量的方法
adjustVolume(int direction, intflags):根据direction(AudioManager.ADJUST_LOWER , AudioManager.ADJUST_RAISE )增加,减少优先级高的音频流的音量。
ps.如果在打电话,此时通话优先级最高,如果在听歌,此时音乐流的优先级最高
adjustStreamVolume(int streamType, int direction, intflags):根据direction值增加,减少相应的音频流的音量。
响铃模式
STREAM_RING 支持响铃模式,通过 AudioManager 的 setRingerMode(int mode)方法可以设置响铃模式, 一共有 RINGER_MODE_SILENT,RINGER_MODE_VIBRATE,RINGER_MODE_NORMAL,RINGER_MODE_MAX 四种模式。
不同响铃模式作用如下:
Silent(静默):静音,并且不会振动。
Vibrate(振动):静音,振动
Normal(普通):响铃,可能会振动(启用来电振动选项才会振动)
来电振动
AudioManager中并没有提供来电振动的方法,但是在系统的音量设置界面可以看到有这个选项。
Android 5.1.0系统截图
通过分析Android中的自带Setting App源代码,我找到了设置此选项的方法:
Settings.System.putInt(getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, val ? 1 : 0)
Settings.System.getInt(getContentResolver(), Settings.System.VIBRATE_WHEN_RINGING, 0)
可以看到,在 com.android.settings.notification.NotificationSettings 类中,是通过调用 Settings.System.putInt() 方法来设置此选项值,通过 Settings.System.getInt() 来得到此选项的值。
在 android.provider.Settings 类中,可以看到 Settings.System.VIBRATE_WHEN_RINGING 的值为 vibrate_when_ringing ,是一个字符串类型的静态常量,但是在代码中是不能访问到的。
结语
通过以上的方式,基本上就可以自己撸一个情景模式的App出来了 :)
更多推荐
所有评论(0)