comme mentionné ici , lorsque l'écran s'éteint, la onStop()
de l'activité en cours sera appelée. Je dois vérifier l'état de marche/arrêt de l'écran lorsque la onStop()
de mon Activity
est appelée. j'ai donc enregistré un BroadcastReceiver
pour ces actions (ACTION_SCREEN_ON
ET ACTION_SCREEN_OFF
) pour enregistrer l'état actuel marche/arrêt (et ils fonctionnent correctement, je me suis connecté!).
mais lorsque j'éteins l'écran et vérifie l'état d'activation/désactivation dans onStop
, cela indique que l'écran est allumé. Pourquoi? Je pense que le récepteur doit recevoir le ACTION_SCREEN_OFF
avant onStop
est appelé, alors qu'est-ce qui ne va pas?
Vous pouvez essayer d'utiliser le service système PowerManager à cet effet, voici un exemple et documentation officielle (notez que cette méthode a été ajoutée dans l'API niveau 7):
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn();
ÉDITER:
la méthode isScreenOn () est obsolète API niveau 21. Vous devez utiliser isInteractive à la place:
boolean isScreenOn = pm.isInteractive();
http://developer.Android.com/reference/Android/os/PowerManager.html#isInteractive ()
PowerManager pm = (PowerManager) mMainActivity.getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = Utils.hasLollipop() ? pm.isInteractive() : pm.isScreenOn();
Comme mentionné dans cette réponse à une question similaire. Dans l'API 21 et au-dessus, nous pouvons utiliser le DisplayManager
pour déterminer l'état de l'affichage. Cela a l'avantage de prendre en charge l'interrogation de plusieurs écrans:
DisplayManager dm = (DisplayManager)
context.getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
if (display.getState() != Display.STATE_OFF) {
return true;
}
}
return false;
Selon votre situation, il peut être plus approprié d'interroger l'affichage sur lequel une vue particulière est affichée:
myView.getDisplay().getState() != Display.STATE_OFF