微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

启用App修改Android系统的Dark/Night Mode设置

如何解决启用App修改Android系统的Dark/Night Mode设置

我正在尝试开发一个能够更改系统暗模式设置(设备范围)的应用程序。这将使我们能够快速访问“暗模式”设置并轻松切换它。

当我感到沮丧时,我现在基本上放弃了我发现的有关黑暗模式的所有内容(即使有些解决方案甚至不应该起作用)。

这是第一部分(我在这里设置了“我需要的一切”)

case "uimode":
    uiModeManager = (UiModeManager) this.getSystemService(Context.UI_MODE_SERVICE);
    appCompatDelegate = AppCompatDelegate.create(this,null);
    resources = this.getResources();
    configuration = new Configuration(resources.getConfiguration());

    UiMode uiMode = new UiMode(this,"ui_cycle",appCompatDelegate);
    uiMode.toggle();
    break;

这是我尽我所能更新设置的一段脚本。

private void setMode(Integer mode) {
    Log.d(TAG,"step 1" );
    appCompatDelegate.setDefaultNightMode(mode);
    Log.d(TAG,"step 2" );
    appCompatDelegate.setLocalNightMode(mode);
    Log.d(TAG,"step 3" );
    uiModeManager.setNightMode(mode);
    Log.d(TAG,"step 4" );
    configuration.uiMode &= ~Configuration.UI_MODE_NIGHT_MASK;
    configuration.uiMode = mode;
    resources.updateConfiguration(configuration,null);
    Log.d(TAG,"step 5" );
}

public void toggle() {
    switch(newMode) {
        case "light":
            setMode(2);
            job.done("Night Mode");
            break;
        case "dark":
            setMode(1);
            job.done("Light Mode");
            break;
        case "auto":
            setMode(0);
            job.done("Auto UI Mode");
            break;
        default:
            job.done("Something is wrong! Please go to Preferences (hold app icon)");
    }
}

虽然我认为它们中的大多数应该定义“应用程序范围”配置,但其中一些的文档并不清楚它可以做什么和不能做什么。

但是文档很好地确定至少其中一个应该更新系统设置 (UiModeManager.setNightMode();)

https://developer.android.com/reference/android/app/UiModeManager#setNightMode(int)

设置系统范围的夜间模式。

对夜间模式的更改将在全球范围内生效,并将导致配置更改(可能是 Activity 生命周期事件)应用于所有正在运行的应用程序。对夜间模式的应用本地实现感兴趣的开发人员应考虑使用 setApplicationNightMode(int) 在本地设置和持久化 -night 限定符或 AppCompatDelegate.setDefaultNightMode(int) 以实现向后兼容的实现。

但它似乎不起作用。

令我惊讶的是,Settings.System 中没有提到夜间/黑暗模式,而这正是我期望的设置。

请注意,清单指定了这些权限需要并已授予。

<uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.CHANGE_CONfigURATION" tools:ignore="ProtectedPermissions" />

<activity>

android:configChanges="uiMode"

在真正的三星 S8 (android 9) 和 Pixel 3a (android 10) 以及其他 android 10 虚拟设备上进行测试。

如果有人知道如何更改系统暗模式设置或知道这实际上是不可能的,请告诉我!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。