3

Android亮度调节关键API与技巧,实现APP亮度个性化设置

 4 weeks ago
source link: https://www.51cto.com/article/786125.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Android亮度调节关键API与技巧,实现APP亮度个性化设置

作者:Reathin 2024-04-15 00:00:00
Android中并未直接提供针对于APP层面的亮度调节方式。对于需要进行APP的亮度调节,可以通过系统亮度调节或当前屏幕的亮度调节方式间接来实现。

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的亮度调节,可以通过系统亮度调节或当前屏幕的亮度调节方式间接来实现。

  1. 记录下系统亮度值和亮度模式,用户在APP界面时,直接修改系统亮度值,当用户退出此APP,或APP至于后台(如按下Home按键等),再将记录的系统亮度值还原。
  2. 对每个Window进行亮度设置,在基类Activity中对APP亮度值进行设置以实现每个当前屏幕的亮度调节。
责任编辑:武晓燕 来源: 沐雨花飞蝶

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK