as mentioned here, when the screen goes off, the onStop()
of current Activity will be called. I need to check the screen on/off status when the onStop()
of my Activity
is called. so I have registered a BroadcastReceiver
for these actions(ACTION_SCREEN_ON
AND ACTION_SCREEN_OFF
) to record the current on/off status(and they work properly, I have logged!).
but when I turn off the screen and check the on/off status in the onStop
, it says the screen is on. why? I think the receiver must receive the ACTION_SCREEN_OFF
before onStop
is called so what's wrong?
You can try to use PowerManager system service for this purpose, here is example and official documentation (note this method was added in API level 7):
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn();
EDIT:
isScreenOn() method is deprecated API level 21. You should use isInteractive instead:
Java:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isInteractive();
Kotlin:
val pm = applicationContext.getSystemService(Context.POWER_SERVICE) as PowerManager
var isScreenOn = pm.isInteractive
http://developer.android.com/reference/android/os/PowerManager.html#isInteractive()