Gibt es einen configChanges für die Änderung von Farben umkehren?

8

Ich möchte wissen, ob Android ein Flag hat, das configChangesin ein Aktivitätsattribut im AndroidManifest eingefügt werden kann, um Änderungen an der Option Farben umkehren des Geräts vorzunehmen .

Das Android-Dokument zeigt die folgenden Flags: - "mcc"
- "mnc"
- "locale"
- "Touchscreen"
- "Tastatur"
- "keyboardHidden"
- "Navigation"
- "screenLayout"
- "fontScale"
- "uiMode" // Dieser ist für den Dunkelmodus
- "Orientierung"
- "Dichte"
- "Bildschirmgröße"
- "kleinste Bildschirmgröße "

Aber keiner von ihnen kümmert sich darum.


Option Farben umkehren:

Geben Sie hier die Bildbeschreibung ein

Augusto Carmo
quelle
1
In den Einstellungen für Android 10 (Pixel 3) oder Android 9 (Galaxy S9) wird "Farben invertieren" nicht angezeigt. Wo sehen Sie diese Option?
CommonsWare
2
Vielen Dank für den Hinweis! Wenn ich damit spiele, vermute ich, dass dies eine reine GPU-Sache ist und eigentlich keine Konfigurationsänderung, aber das ist nur eine Vermutung. Wird Ihre Aktivität geändert, wenn diese umgeschaltet wird?
CommonsWare
1
AFAIK onConfigurationChanged()würde nur ausgelöst, wenn Sie das richtige android:configChangesAttribut hätten und das Standardverhalten für Konfigurationsänderungen deaktiviert hätten. Wird Ihre Aktivität nach dem Umschalten auf "Farben umkehren" zerstört und neu erstellt?
CommonsWare
1
OK, es ist definitiv eine Konfigurationsänderung. Sofern in Logcat keine Systemmeldung vorhanden ist, weiß ich nicht, wie ich feststellen soll, um welche Art von Konfigurationsänderung es sich handelt und wie Sie sie über deaktivieren würden android:configChanges. Wenn Sie alle dokumentierten ohne Erfolg ausprobiert haben, ist der android:configChangesWert entweder nicht dokumentiert oder nicht vorhanden (dh Sie können ihn nicht deaktivieren) ... und keine dieser Optionen ist großartig. :-(
CommonsWare
1
@CommonsWare Ich fürchte, Android hat kein Flag für die Änderung der Farbinversion. Ich habe mit allen in docs ( mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|screenLayout|fontScale|uiMode|orientation|density|screenSize|smallestScreenSize) verfügbaren Flags getestet und keiner hat den onConfigurationChangedRückruf ausgelöst = /. Wie auch immer, ich möchte Ihnen ein paar für Ihre Aufmerksamkeit, Zeit und bereit sind , Hilfe danken \ o /
Augusto Carmo

Antworten:

1

Wenn Sie den Status invertierter Farben überprüfen müssen, sehe ich nur zwei mögliche Lösungen.

Manuelle Überprüfung. Aus dieser Frage entnommen:
Aktivierungs- / Deaktivierungsstatus und Barrierefreiheit abrufen Farbinversionsmodus

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
    }

Und auch Sie können verwenden AccessibilityService.
Bei umgekehrter Inversionsfarbe habe ich ein solches Ereignis:

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;

So kann ich den aktuellen Status irgendwie so überprüfen:

override fun onAccessibilityEvent(event: AccessibilityEvent) {
        val isInvertedColorsChanged = event.text.contains("Invert colors")
        if (isInvertedColorsChanged) {
            val isEnabled = event.contentDescription == "On"
            //do what you need
        }
    }

Ich bin nicht sicher, ob es für jedes Gerät funktioniert.
Ich habe es noch nie gemacht, also gibt es vielleicht eine bessere Lösung.

Merov
quelle