如提到的here,當屏幕熄滅時,將調用當前Activity的onStop()
。當我的Activity
的onStop()
被調用時,我需要檢查屏幕開/關狀態。所以我已經爲這些操作(ACTION_SCREEN_ON
和ACTION_SCREEN_OFF
)註冊了BroadcastReceiver
來記錄當前的開/關狀態(並且它們正常工作,我已經記錄!)。
但是當我關閉屏幕並檢查onStop
中的開/關狀態時,表示屏幕已打開。爲什麼?我認爲在調用onStop
之前接收器必須收到ACTION_SCREEN_OFF
,所以出了什麼問題?如何檢查onStop()中的屏幕開/關狀態?
回答
你可以嘗試使用PowerManager的系統服務,爲這個目的,我這裏是和official documentation(注意:這個方法在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()
優秀的亞歷山大! 'BroadcastReceiver'沒有收到我想要的動作,但是這個人做到了:) – Soheil
'pm.isScreenOn()'已棄用。 –
@SuperThomasLab改爲使用什麼? –
- 1. 如何在jni中獲取屏幕狀態(開/關)?
- 2. 如何區分來電時的屏幕開/關狀態?
- 3. 在onStop()onPause()中詢問屏幕是否打開/關閉
- 4. Activity的onStop()狀態中的AsyncTask狀態
- 5. 屏幕開/關檢測
- 6. 如何從Java JFrame檢查屏幕狀態
- 7. 從XCUITest中,我如何檢查UISwitch的開/關狀態?
- 8. 檢查時,屏幕關閉
- 9. 如何檢查iOS11屏幕錄製打開或關閉?
- 10. 如何在J2ME中檢查藍牙開/關狀態?
- 11. Android的內存管理中的onStop活動(或關閉屏幕)
- 12. 如何檢查屏幕中的對象?
- 13. 有沒有辦法檢查活動是onStop狀態還是onPause狀態?
- 14. 如何檢查開關狀態離子發送到db
- 15. 如何檢查Mac/Python中的屏幕是否關閉?
- 16. 檢查當前屏幕在iOS中是打開還是關閉
- 17. 如何檢測屏幕何時開啓?
- 18. Android密碼屏幕狀態
- 19. 如何檢查狀態onKeypress
- 20. 如何檢查namenode狀態?
- 21. 如何檢查JDialog狀態
- 22. 如何檢查jqGrid中行的狀態
- 23. 如何檢查laravel中的ajax狀態
- 24. 如何檢查DynamoDB2中表的狀態?
- 25. 如何根據故事板中的狀態建模不同的開始屏幕?
- 26. 檢查屏幕窄
- 27. 如何檢測小工具是否開/關屏幕?
- 28. 屏幕:如何打開備用屏幕?
- 29. 如何檢查twitch.tv中的流是否處於打開狀態?
- 30. 如何檢查Android設備是HDPI屏幕還是MDPI屏幕?
「我認爲在onStop被調用之前,接收器必須接收ACTION_SCREEN_OFF,所以出了什麼問題?」 - 我不知道你爲什麼會這樣認爲。使用'Log'語句或斷點來查看哪些被首先調用。更好的是,重新設計你的應用程序,而不關心是否因爲屏幕關閉而調用了onStop(),與其他原因相比。 – CommonsWare
@CommonsWare這個應用程序必須能夠區別'onStop'被調用的不同情況,所以我必須知道是否關閉屏幕導致'onStop'被調用或其他事情。更好的解決方案? – Soheil
「該應用程序必須能夠區分onStop被調用的不同情況」 - 爲什麼?屏幕關閉或用戶按下HOME,或用戶按下BACK,或用戶接聽來電,或用戶點擊通知,或用戶做了其他任何事情,它對您的應用程序有什麼不同?導致你的活動不再可見?屏幕關閉通常不是特例。 – CommonsWare