29

ここで述べたように、画面がオフにonStop()なると、現在のアクティビティの が呼び出されます。が呼び出されたときonStop()に、画面のオン/オフの状態を確認する必要があります。そのため、これらのアクション ( AND ) をActivity登録して、現在のオン/オフの状態を記録しました (そして、それらは適切に機能し、ログに記録しました!)。 しかし、画面をオフにして でオン/オフの状態を確認すると、画面がオンになっていると表示されます。なぜ?受信者は呼び出される前に受信する必要があると思いますが、何が問題なのですか?BroadcastReceiverACTION_SCREEN_ONACTION_SCREEN_OFF
onStopACTION_SCREEN_OFFonStop

4

3 に答える 3

73

この目的で PowerManager システム サービスの使用を試みることができます。例と公式ドキュメントを次に示します(このメソッドは API レベル 7 で追加されたことに注意してください)。

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn();

編集:

isScreenOn() メソッドは非推奨の API レベル 21 です。代わりに isInteractive を使用する必要があります。

boolean isScreenOn = pm.isInteractive();

http://developer.android.com/reference/android/os/PowerManager.html#isInteractive()

于 2013-10-13T21:23:38.957 に答える
0
PowerManager pm = (PowerManager) mMainActivity.getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = Utils.hasLollipop() ? pm.isInteractive() : pm.isScreenOn();
于 2019-12-19T04:18:05.137 に答える