最近在做需求时遇到一个场景,需要打开系统原生的夜间模式功能,退出应用时再关闭。
从settings模块代码中找到夜间模式的入口,通过查找代码,发现是通过一个Secure值控制的,跟踪代码找到该属性。
打开:
Secure.putInt(getContentResolver(), Secure.NIGHT_DISPLAY_ACTIVATED, 1);
关闭:
Secure.putInt(getContentResolver(), Secure.NIGHT_DISPLAY_ACTIVATED, 0);
在此记录一下。同样,想获取该值则使用 get 方法即可。
需要注意的是:写Secure值需要系统权限,因此使用到了systemUid。
夜间模式“浓度”调节功能:
public boolean setColorTemperature(int colorTemperature) {
return Secure.putIntForUser(mContext.getContentResolver(),
Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE, colorTemperature, mUserId);
}
可以看出,主要调节 Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE 这个值,具体定义数据的大小,通过查找源码,具体为:
930 <integer name="config_nightDisplayColorTemperatureMin">2596</integer>
931
932 <!-- Default color temperature, in Kelvin, to tint the screen when Night display is
933 activated. -->
934 <integer name="config_nightDisplayColorTemperatureDefault">2850</integer>
935
936 <!-- Maximum color temperature, in Kelvin, supported by Night display. -->
937 <integer name="config_nightDisplayColorTemperatureMax">4082</integer>