自7.0开始谷歌提供了夜间模式,用于将屏幕色彩调成较为柔和的琥珀色,但因该模式需要硬件的支持,所以不是所有设备上都可用,也不常见。

相关代码:
\frameworks\base\services\core\java\com\android\server\display\NightDisplayService.java
\frameworks\base\core\java\com\android\internal\app\NightDisplayController.java
\frameworks\base\core\res\res\values\config.xml

设置中相关代码:
\packages\apps\Settings\src\com\android\settings\display\NightDisplaySettings.java

夜间模式的开启和关闭,相关方法代码的调用,可完全参考设置中的夜间模式,config中默认配置如下,从配置中可见,夜间模式是否能够生效,主要依赖硬件:是否拥有HWC引入功能,能够在不增加耗电、性能、兼容性的情况下,实现颜色矩阵转换操作。

//要修改夜间模式,需要有权限:
                android:protectionLevel="signature|privileged" />
false

   
    1

   
    false

   
    @bool/config_setColorTransformAccelerated

   
    0

   
    79200000

   
    21600000

   
    2596

   
    2850

   
    4082

   
        0.0
        0.0
        1.0
        -0.00000000962353339
        0.000153045476
        0.390782778
        -0.0000000189359041
        0.000302412211
        -0.198650895
   

   
        0.0
        0.0
        1.0
        -0.00000000962353339
        0.000153045476
        0.390782778
        -0.0000000189359041
        0.000302412211
        -0.198650895
   


设置中夜间模式的所有设置和操作,都是在NightDisplayController中实现,其中主要方法如下:

//开启和关闭
public boolean setActivated(boolean activated) {
        if (isActivated() != activated) {
            Secure.putStringForUser(mContext.getContentResolver(),
                    Secure.NIGHT_DISPLAY_LAST_ACTIVATED_TIME,
                    LocalDateTime.now().toString(),
                    mUserId);
        }
        return Secure.putIntForUser(mContext.getContentResolver(),
                Secure.NIGHT_DISPLAY_ACTIVATED, activated ? 1 : 0, mUserId);
    }

//设置模式,共三种,不定时,定时开启和关闭,在日落到日出的时间开启
public @AutoMode int getAutoMode() {
        int autoMode = Secure.getIntForUser(mContext.getContentResolver(),
                Secure.NIGHT_DISPLAY_AUTO_MODE, -1, mUserId);
        if (autoMode == -1) {
            if (DEBUG) {
                Slog.d(TAG, "Using default value for setting: " + Secure.NIGHT_DISPLAY_AUTO_MODE);
            }
            autoMode = mContext.getResources().getInteger(
                    R.integer.config_defaultNightDisplayAutoMode);
        }

        if (autoMode != AUTO_MODE_DISABLED
                && autoMode != AUTO_MODE_CUSTOM
                && autoMode != AUTO_MODE_TWILIGHT) {
            Slog.e(TAG, "Invalid autoMode: " + autoMode);
            autoMode = AUTO_MODE_DISABLED;
        }

        return autoMode;
    }
//设置色温,如config中配置,最大4082,最小2596
public boolean setColorTemperature(int colorTemperature) {
        return Secure.putIntForUser(mContext.getContentResolver(),
            Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE, colorTemperature, mUserId);
    }
//
————————————————
版权声明:本文为CSDN博主「thh159」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/thh159/article/details/88289467

更多相关文章

  1. android TextView的字体颜色设置的多种方法(续)
  2. android TextView的字体颜色设置的多种方法(续)
  3. android TextView的字体颜色设置的多种方法(续)
  4. Android使用Dialog风格弹出框的Activity
  5. Android(安卓)编辑框(EditText)属性学习
  6. Android(安卓)EditText属性总结
  7. android EditText 全面阐述
  8. android基本组件 Button
  9. 设置Activity全屏与不全屏

随机推荐

  1. Android(安卓)开发常用的网站
  2. Android(安卓)圆形ProgressBar风格设置
  3. 如何实现像ios那样的富有弹性的ListView
  4. ExifInterface 介绍
  5. Android学习笔记(3)——Android(安卓)Dem
  6. 修改android 开机之后的默认语言成中文
  7. Android开发:定制Activity的标题栏(Titleb
  8. App Framework of Android
  9. Android一行代码 搞定图片太多,太大OOM(内
  10. ok6410 android driver(2)