2010-04-04 81 views
5

正如前面提到的問題所述,我很難攔截所有android.intent.action.SCREEN_ON事件而沒有長時間的Service(不鼓勵)。如何檢測屏幕何時開啓?

如果我可以在任何給定的時間在屏幕上打開,我可以解決這個問題。

任何人都可以建議一個方法調用,將返回此信息? 1.5以上。

回答

1

系統故意不允許應用程序在其清單中接收ACTION_SCREEN_ONACTION_SCREEN_OFF廣播,因爲我們非常不希望啓動一堆應用程序來打開或關閉屏幕。這是發生在所有的時間,並且必須儘可能快。

不幸的是,正如指出的那樣,沒有辦法立即檢查屏幕是否打開。

+0

實際上可以接收廣播,作爲一個長期服務BroadcastReceivers。我的應用程序相當高興,但我試圖nix長壽命的服務。如果您將其作爲接收器上的意圖過濾器提供,它只會失敗。 – 2010-04-05 05:59:24

3

如果您的代碼正在運行,屏幕很有可能處於啓動狀態。主要的例外是如果您的代碼通過AlarmManager被喚醒。

如果ACTION_SCREEN_ON是一個粘滯的廣播,這將是很好的,但似乎並非如此。

如果您可以使用Android 2.1及更新版本,PowerManager現在有一個isScreenOn()方法。好消息是,這是可用的。壞消息是,因爲它被添加到那裏,所以不太可能有任何其他方式來確定它。而且,對源代碼的快速檢查並沒有給你太多的希望,可能會破解前面SDK中的信息。

5

PowerManager.isScreenOn() 自:API級別7

+0

這對於我在注8中的工作,但在選項卡4上沒有... – 2014-12-19 23:14:14