Android-P夜间模式

0 前言

    Android-P可通过“Developer options > Night mode”打开夜间模式,本文研究其配置和效果。

验证环境:Pixel 3a、模拟器

1 设置

图1.1 Night mode

     上图对应XML配置如下:

        <ListPreference
            android:key="dark_ui_mode"
            android:title="@string/dark_ui_mode"
            android:dialogTitle="@string/dark_ui_mode_title"
            android:entries="@array/dark_ui_mode_entries"
            android:entryValues="@array/dark_ui_mode_values" />
<!-- @file: packages/apps/Settings/res/xml/development_settings.xml -->
图1.2 Set Night mode

    上图对应XML配置如下:

    <!-- Titles for ui dark mode preference. -->
    <string-array name="dark_ui_mode_entries" >
        <item>Automatic (based on time of day)</item>
        <item>Always on</item>
        <item>Always off</item>
    </string-array>

    <!-- Values for ui dark mode preference. -->
    <string-array name="dark_ui_mode_values" translatable="false" >
        <item>auto</item>
        <item>yes</item>
        <item>no</item>
    </string-array>
<!-- @file: packages/apps/Settings/res/values/arrays.xml -->

    对应代码如下:

packages/apps/Settings/src/com/android/settings/development/DarkUIPreferenceController.java

frameworks/base/core/java/android/app/UiModeManager.java

frameworks/base/core/java/android/app/IUiModeManager.aidl

frameworks/base/services/core/java/com/android/server/UiModeManagerService.java

    从下面函数来看,需要“MODIFY_DAY_NIGHT_MODE”权限才能设置夜间模式:

        @Override
        public void setNightMode(int mode) {
            if (isNightModeLocked() &&  (getContext().checkCallingOrSelfPermission(
                    android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)
                    != PackageManager.PERMISSION_GRANTED)) {
                Slog.e(TAG, "Night mode locked, requires MODIFY_DAY_NIGHT_MODE permission");
                return;
            }
            ...
        }
// @file: frameworks/base/services/core/java/com/android/server/UiModeManagerService.java

    设置结果保存到如下字段中:

public static final String UI_NIGHT_MODE = "ui_night_mode";
// @file: frameworks/base/core/java/android/provider/Settings.java

    可通过下面命令查看当前设置:

adb shell settings get secure ui_night_mode
# 0 - Automatic (based on time of day)
# 1 - Always on
# 2 - Always off

2 实现

TODO

参考资料

[1]Android P 开启和关闭夜间模式以及调节浓度的方法

[2]android 夜间模式

[3]简洁优雅地实现夜间模式

[4]Android夜间模式 - DayNight Mode的使用

[5]日夜切换两种模式

[6]Android中夜间模式的三种实现方式

[7]Android日间模式夜间模式切换(无需重启)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OneSea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值