问题描述
我正在尝试开发一个能够更改系统暗模式设置(设备范围)的应用程序。这将使我们能够快速访问“暗模式”设置并轻松切换它。
当我感到沮丧时,我现在基本上放弃了我发现的有关黑暗模式的所有内容(即使有些解决方案甚至不应该起作用)。
这是第一部分(我在这里设置了“我需要的一切”)
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 (将#修改为@)