Android Studio中如何通过应用编程触发系统全局深色模式
Android 应用触发全局系统深色模式相关问题解答
可行性结论
普通第三方应用无法直接触发系统全局深色模式切换,这是安卓系统的权限限制:从Android 10开始,全局深色模式的修改权限仅对系统级应用、持有系统签名的应用开放,普通上架应用无法获取对应权限。
现有代码无效原因
你使用的AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); API本身的设计定位就是仅控制当前应用的深色模式状态,本身不具备修改系统全局配置的能力,仅作用于应用内是预期行为。
关于SharedPreferences的作用说明
SharedPreferences(你提到的sharedPref是它的简写)仅能用来存储你自身应用的深色模式配置状态,比如记录用户在应用内选择的「强制深色/跟随系统/强制浅色」选项,应用重启时读取配置恢复对应显示模式,它本身不具备任何切换深色模式的能力,自然也不存在「用它实现深色模式是最优方案」的说法,它只是一个本地状态存储工具。
可选实现方案
- 如果你开发的是系统预置应用、定制ROM内置应用:可以申请系统级权限
android.permission.MODIFY_DAY_NIGHT_MODE,获取权限后通过UiModeManager修改全局深色模式,示例代码如下:
UiModeManager uiModeManager = getSystemService(UiModeManager.class); // 开启全局深色模式 uiModeManager.setNightMode(UiModeManager.MODE_NIGHT_YES);
注意该权限的保护等级为signature|privileged,普通第三方应用即使在清单文件中声明也无法获取。
- 如果你开发的是面向普通用户的上架第三方应用:没有任何办法直接修改系统全局深色模式,你最多可以引导用户跳转到系统显示设置页面手动切换,跳转代码如下:
Intent intent = new Intent(Settings.ACTION_DISPLAY_SETTINGS); startActivity(intent);
参考操作截图

内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

