Android升到5.0或5.1之后,细心的同学可能会发现,在我们调节音量的时候,无法调到静音模式。音量调到1的时候,再往下调,就变成震动模式了。如果你说再按下键不就是静音模式了吗?其实这不是静音模式,而是禁止打扰的情景模式ZenMode。ZenMode分为禁止打扰,仅容许优先打扰内容,一律容许打扰。即在音量seekBar下面的3个按钮。而静音模式,震动模式,正常模式是属于RingerMode的。你可以用你的手机测试一下。你按音量键往下调到震动,再往上调一格,此时音量显示为1,图标是正常模式,然后重启手机。手机重启之后,进入Settings->Sound & notification,你会发现Ring volume的seekBar为0,但是图标显示的是正常模式。明明我在重启之前手机音量1了,而且手机的Ringtone是有声音的,怎么重启之后就变成0了呢?网上有人说用这个方法把手机就调成静音模式了,其实这不是静音模式,而是音量为0的正常模式。
在我们按音量键调节音量时,首先在PhoneWindow.java中,被onKeyDown和onKeyUp捕获。最终的处理是在AudioService中实现,AudioService位于frameworks/base/media/java/android/media/下。
最终实现的方法是
private void adjustStreamVolume(int streamType, int direction, int flags,String callingPackage, int uid) {
………………
if (((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) ||
(streamTypeAlias == getMasterStreamType())) {
………………
final int r