Hier ist mein Szenario. Ich habe eine App, die Hintergrundgeräusche wiedergibt. Mit dem BroadcastReceiver kann ich feststellen, wann sich der Bildschirm ausschaltet, und dann die Sounds abschalten. Ich kann auch feststellen, ob sich der Bildschirm wieder einschaltet. Wenn sich das Gerät jedoch im Sperrzustand befindet, möchte ich nicht, dass der Ton gestartet wird. Deshalb warte ich auf das Signal der Absicht ACTION_USER_PRESENT. Das funktioniert, aber wenn der Benutzer den Bildschirm schnell wieder einschaltet, nachdem er ausgeschaltet war, wird weder der Sperrbildschirm noch die ACTION_USER_PRESENT-Meldung angezeigt. Gibt es also eine Möglichkeit, beim Wiedereinschalten des Bildschirms festzustellen, ob das Gerät gesperrt ist oder nicht, was wohl auch bedeutet, ob es schläft oder nicht?
Antworten
Zu viele Anzeigen?Sie können die KeyguardManager um zu prüfen, ob das Gerät gesperrt ist. Hier ist etwas Code (ich habe das nicht selbst ausprobiert):
KeyguardManager kgMgr = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
boolean showing = kgMgr.inKeyguardRestrictedInputMode();
Viel Glück!
Die Lösung von Satur9nine war seinerzeit richtig, aber seither isKeyguardRestricatedInputMode()
wurde veraltet. Einige powerManager-bezogene Funktionen sind nun ebenfalls veraltet.
Es gibt eine neuere, genauere Lösung: [isKeyguardLocked()](https://developer.android.com/reference/android/app/KeyguardManager#isKeyguardLocked()) ob das Gerät gesperrt ist, und einen anderen Ansatz, um zu erfahren, ob die Bildschirm ist interaktiv Sie suchen nach einer Kombination aus beidem.
KeyguardManager appKeyguard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
PowerManager appPowerManager = (PowerManager) getSystemService(Context,POWER_SERVICE);
boolean showing = !appKeyguard.isKeyguardLocked() && appPowerManager.isInteractive();