修改屏幕亮度
使用付款码的时候会发现,打开付款码页面手机屏幕亮度会变为最亮,方便商户识别付款码。今天来了解一下如何改变手机的屏幕亮度。
1、改变当前窗口的屏幕亮度
修改Window中screenBrightness的值(0.0~1.0)亮度只保存在当前的Window,退出当前的窗口就会恢复原样。是主流应用采用的方法,不会影响其它应用的显示亮度。
/**
* This can be used to override the user's preferred brightness of
* the screen. A value of less than 0, the default, means to use the
* preferred screen brightness. 0 to 1 adjusts the brightness from
* dark to full bright.
*/
public float screenBrightness = BRIGHTNESS_OVERRIDE_NONE;
方法比较简单使用,简单几行即可实现改变窗口的亮度:
//拿到Window的属性
val lp = window.attributes
//设置亮度属性值 0~1 之间
lp.screenBrightness = 0.5f
//更新Window属性值
window.attributes = lp
应在界面推出后恢复之前的显示亮度,正如付款码界面退出后,应用的显示亮度恢复成之前原来的亮度。默认亮度置为BRIGHTNESS_OVERRIDE_NONE 即可。
/**
* Default value for {@link #screenBrightness} and {@link #buttonBrightness}
* indicating that the brightness value is not overridden for this window
* and normal brightness policy should be used.
*/
public static final float BRIGHTNESS_OVERRIDE_NONE = -1.0f;
2、改变系统中的亮度属性
此种方法修改屏幕亮度是全局的,需要相应的权限,因为是直接对系统内容进行操作。
<uses-permission android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />
借助canWrite(Context context)方法检查有无修改系统设置的权限
if (!Settings.System.canWrite(this)) {
//没有读写系统设置的权限,申请
}
如果没有,就需要跳转到设置界面,让用户选择授权允许应用修改系统设置
val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
//转到系统设置的activity,需用户手动打开app的修改系统设置内容开关
startActivity(intent)
修改系统的亮度,通过写Settings数据库完成:
//修改系统的亮度 0~255之间
Settings.System.putInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS, screenBrightValue);
SCREEN_BRIGHTNESS 亮度值范围为(0~255)
/**
* The screen backlight brightness between 0 and 255.
*/
@Readable
public static final String SCREEN_BRIGHTNESS = "screen_brightness";
相应的,还可以读取系统亮度的设置:
val screenBright = Settings.System.getInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS);
这会修改整个系统的亮度,对其它应用生效。不建议普通应用修改,这种方法是不推荐的,了解即可。