Android系统亮度调节
Android系统亮度调节全局性最高,常见于系统设置中的亮度设置项。Android中提供了获取和设置系统亮度值(“手动模式下的亮度值”)的接口,调用相应的API获取当前的屏幕亮度值和设置一个特定的值。返回的亮度值是处于0-255之间的整型数值。
// 获取系统亮度
Settings.System.getInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS);
// 设置系统亮度
Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS,systemBrightness);
Android2.X以后的系统中,系统亮度调节中新增了“自动亮度”选项。“自动亮度”是依据外界光源来自动的改变系统亮度,目前大部分手机中对“自动亮度”还可以进行小幅度的调节其值。与自动亮度相对应的是“手动亮度”,当处于“手动亮度”下,设置拖动亮度进度条会大幅度的改变Android系统亮度。“手动亮度”和“自动亮度”分别称之为Android系统的“亮度模式”。
// 获取系统亮度模式
Settings.System.getInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE);
// 设置系统亮度模式
Settings.System.putInt(getContentResolver(),Settings.System.SCREEN_BRIGHTNESS_MODE,systemMode);
Android中并未提供处于“自动亮度”模式下的亮度值接口。上面的获取系统亮度值接口实际上都是指“手动亮度”模式下的亮度值。通过手动亮度值以及设置系统亮度模式接口,可以满足常规的大部分针对Android系统亮度设置编码需求,以完成系统亮度调节。
Android当前Window亮度调节
常见场景:打开收付款界面时屏幕亮度变亮
//brightness是一个0.0-1.0之间的一个float类型数值。
Window window = activity.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
lp.screenBrightness = brightness;
window.setAttributes(lp);
默认情况下,当我们直接修改了系统亮度值后,当前Window中是可以即时反应出来亮度效果的,这是因为默认情况下,WindowManager.LayoutParams的screenBrightness的默认值为WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE。表示Window没有自己的亮度参数,将跟随系统亮度效果的变化。当调整系统亮度后,所有Window都即时反应出系统亮度设置效果。
Android APP亮度调节
Android中并未直接提供针对于APP层面的亮度调节方式。对于需要进行APP的亮度调节,可以通过系统亮度调节或当前屏幕的亮度调节方式间接来实现。
- 记录下系统亮度值和亮度模式,用户在APP界面时,直接修改系统亮度值,当用户退出此APP,或APP至于后台(如按下Home按键等),再将记录的系统亮度值还原。
- 对每个Window进行亮度设置,在基类Activity中对APP亮度值进行设置以实现每个当前屏幕的亮度调节。