Если вам нужно проверить состояние инвертированных цветов, я вижу только два возможных решения.
Ручная проверка. Взято из этого вопроса:
Получить включение / отключение статуса и доступности Режим инверсии цвета
fun isInversionModeEnabled(): Boolean {
var isInversionEnabled = false
val accessibilityEnabled = try {
Settings.Secure.getInt(contentResolver, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED)
} catch (e: Settings.SettingNotFoundException) {
Log.d(TAG, "Error finding setting ACCESSIBILITY_DISPLAY_INVERSION_ENABLED: " + e.message)
Log.d(TAG, "Checking negative color enabled status")
val SEM_HIGH_CONTRAST = "high_contrast"
Settings.System.getInt(contentResolver, SEM_HIGH_CONTRAST, 0)
}
if (accessibilityEnabled == 1) {
Log.d(TAG, "inversion or negative colour is enabled")
isInversionEnabled = true
} else {
Log.d(TAG, "inversion or negative colour is disabled")
}
return isInversionEnabled
}
А также вы можете использовать AccessibilityService
.
Вкл. цвет инверсии изменился, у меня есть такое событие:
EventType: TYPE_VIEW_CLICKED; EventTime: 170718119; PackageName: com.android.systemui;
MovementGranularity: 0; Action: 0; ContentChangeTypes: []; WindowChangeTypes: [] [
ClassName: android.widget.Switch; Text: [Invert colors]; ContentDescription: On;
Так что я могу проверить текущее состояние как-то так:
override fun onAccessibilityEvent(event: AccessibilityEvent) {
val isInvertedColorsChanged = event.text.contains("Invert colors")
if (isInvertedColorsChanged) {
val isEnabled = event.contentDescription == "On"
//do what you need
}
}
Я не уверен, что это будет работать для каждого устройства .
Я никогда не делал этого раньше, так что, возможно, есть лучшее решение.