阅读三星和其他OEM暗/夜模式系统设置

时间:2020-01-29 20:21:54

标签: android kotlin samsung-mobile

我继承了“ Theme.AppCompat.DayNight”主题,以在Android Q上自动支持暗模式,并在以前的版本中手动支持暗模式。在“设置”中,我让用户选择“打开”,“关闭”或“自动”,然后使用以下代码:

AppCompatDelegate.setDefaultNightMode(settings.darkMode())

其中 settings.darkMode 是:

        val darkValue =
            sharedPreferences.getString("PREF_DARK_THEME", null)
        return when (darkValue) {
            "ON" -> MODE_NIGHT_YES
            "OFF" -> MODE_NIGHT_NO
            else -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                MODE_NIGHT_FOLLOW_SYSTEM
            } else {
                MODE_NIGHT_AUTO_BATTERY
            }
        }

不过,我想添加对Samsung One UI的“ 夜间模式”的支持。是否可以读取该系统设置?我想做这样的事情:

            ...
            else -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                MODE_NIGHT_FOLLOW_SYSTEM
            } else if("samsung"==Build.MANUFACTURER && isSamsungNightModeEnabled()) {
                MODE_NIGHT_YES
            } else ...[add other brands]...
            } else {
                MODE_NIGHT_AUTO_BATTERY
            }

1 个答案:

答案 0 :(得分:0)

感谢Pawel's comment,这就是我所做的。似乎工作正常。

    fun darkMode(sharedPreferences: SharedPreferences, context: Context): Int {
        val darkValue =
            sharedPreferences.getString("PREF_DARK_THEME", null)
        return when (darkValue) {
            "ON" -> MODE_NIGHT_YES
            "OFF" -> MODE_NIGHT_NO
            else -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                MODE_NIGHT_FOLLOW_SYSTEM
            } else {
                val nightModeFlags =
                    context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
                when (nightModeFlags) {
                    Configuration.UI_MODE_NIGHT_YES -> MODE_NIGHT_YES
                    Configuration.UI_MODE_NIGHT_NO -> MODE_NIGHT_NO
                    else -> MODE_NIGHT_AUTO_BATTERY
                }
            }
        }
    }

我从活动的onResume()方法调用AppCompatDelegate.setDefaultNightMode(darkMode(preferences, this)),并且在通知面板上修改设备的“夜间模式”后,应用程序会自动更改其主题。在Note 9上进行了测试。