自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引入功能,能够在不增加耗电、性能、兼容性的情况下,实现颜色矩阵转换操作。

//要修改夜间模式,需要有权限: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,最小2596public boolean setColorTemperature(int colorTemperature) {        return Secure.putIntForUser(mContext.getContentResolver(),            Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE, colorTemperature, mUserId);    }//

更多相关文章

  1. EditView、ImageView、Button
  2. Android横屏竖屏切换的问题
  3. Android中实用小知识
  4. Android(安卓)Studio的安装
  5. Android设置Settings:ListPreference【3】
  6. Activity的四种启动模式和onNewIntent()
  7. Android四种Activity的加载模式
  8. Android(安卓)ListView 设置分割线的设置
  9. 利用HTML5开发Android

随机推荐

  1. 每日前端夜话(0x04):2018年JavaScript状态
  2. LeetCode #27 移除元素
  3. 以B站C语言视频为基础的课后总结(一)
  4. LeetCode #26 删除排序数组中的重复项
  5. 排序算法 #5 归并排序
  6. 来自Kenneth Reitz大神的建议:避免不必要
  7. 满满的一篇,全是复杂度分析核心知识点
  8. LeetCode #80 删除排序数组中的重复项II
  9. 再聊聊Python中文社区的翻译
  10. Python对象的身份迷思:从全体公民到万物皆