12 Stimmen

So erkennen Sie, ob das Gerät schläft

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?

12voto

Buda Gavril Punkte 20759
((PowerManager) getSystemService(Context.POWER_SERVICE)).isScreenOn()

10voto

satur9nine Punkte 12911

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!

1voto

A. Abramov Punkte 1772

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();

0voto

Dekra Punkte 534
((PowerManager) getSystemService(Context.POWER_SERVICE)).isScreenOn()

zeigt an, ob der Bildschirm eingeschaltet ist. Es wird also wahr, wenn der Bildschirm eingeschaltet ist, das Gerät aber gesperrt ist. Stattdessen,

inKeyguardRestrictedInputMode()

wird nur wahr, wenn das Gerät gesperrt ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X