1

我有一個只在設備屏幕熄滅時纔開始工作的應用程序。我已經設置了廣播接收機(Intent.ACTION_SCREEN_OFF),它工作正常。設備屏幕熄滅時,我總是在我的LOGCAT中獲得記錄。到現在爲止還挺好。如何在屏幕熄滅時開始活動?

我的onReceive代碼來自ACTION_SCREEN_OFF使用一些代碼計算的東西,並且都執行良好(當屏幕關閉時)。到現在爲止還挺好。

在我的onReceive代碼結束時,我開始新的活動,但目標活動的onCreate並不總是執行。 (例如,在我的HTC Desire 2.3.7上工作正常,在HTC Wildfire S 2.3.5,Xperia Arc S 2.3.4,它不執行,在三星Galaxy ACE 2.2.1上,它取決於有時執行有時isn' T)。我的LOGCAT顯示onReceive執行到最後,但Activity未啓動。我用下面的代碼來開始這個活動:

Intent startH_Activity = new Intent(getApplicationContext(), HandleActivity.class); 
     startH_Activity.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startH_Activity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(startH_Activity); 

重要的事情需要注意:

  • 我說,上面提到的一些手機不能正常工作。那麼它不會立即工作,就像它應該(SCREEN_OFF發生時)。總是活動開始時間..屏幕關閉後10-15分鐘(這是不可接受的)

  • 當屏幕關閉,活動未啓動,如果我按設備上的電源按鈕,它立即引發我的目標活動和應用程序正常工作。 (再次這是不可接受的,它應該自動啓動)。

  • 當任何設備連接到PC時,它的工作方式應該如此。活動在屏幕熄滅後立即開始。

在閱讀了很多堆棧溢出之後,我意識到這是因爲MAYBE設備進入睡眠狀態。這就是爲什麼如果我按下POWER按鈕它會像正常工作,或者10-15分鐘後自動喚醒,因爲它同步或什麼。所以我使用了WAKELOCK。

//OnCreate Service 
powMan = (PowerManager) getSystemService(POWER_SERVICE); 
wake = powMan.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG"); 

//OnReceive (screen goes off) 
wake.acquire(); 

但仍然沒有成功。 (我做錯了嗎?)即使喚醒鎖被獲取,我的活動也不會顯示在這些設備上。

基本上我在問什麼。如何在屏幕熄滅時打開常規活動?或者至少如何開啓屏幕,如果活動不會開始(記住,按下電源按鈕顯示我的活動

我現在真的需要一些幫助,因爲我對此感到非常沮喪。 。對於

+0

屏幕關閉!指屏幕鎖定? http://chandan-tech.blogspot.in/2010/10/handling-screen-lock-unlock-in-android.html – Raghunandan 2013-04-05 18:08:57

+0

其實是的。我認爲屏幕熄滅時所有設備都會鎖定。 – rootpanthera 2013-04-05 18:37:39

回答

0

幫助時,屏幕熄滅你應該開始服務,而不是活動

+0

我需要活動來向用戶顯示一些數據,這是我在服務中無法做到的。 – rootpanthera 2013-04-05 17:00:54

+0

然後你不應該在SCREEN_OFF上這樣做。用戶正在控制設備,只有他們應該用手指(或聲音;或腦電波)開始活動。 – 2013-04-05 17:10:02

+0

所以android設備沒有鬧鐘或你的意見?鬧鐘的工作原理與我的應用程序相同。它將手機從睡眠中喚醒並顯示一個活動(鬧鐘顯示用戶選擇他要做什麼的活動:禁用鬧鐘,貪睡..等) – rootpanthera 2013-04-05 17:36:36

0

我會註冊又一廣播接收器,當屏幕變亮(Intent.ACTION_SCREEN_ON)啓動活動

兩個問題:

1)您如何將數據從一個接收器傳遞到另一個接收器?我想到的是啓動服務或將信息保存到文件(或共享首選項)。

2)如果您有兩個必須啓動活動的事件會發生什麼? (例如「開始的東西」和「完成的東西」)。您必須解決這個問題,要麼顯示兩個事件,要麼顯示最新的事件。

請注意,用戶可以在不解鎖屏幕的情況下打開和關閉屏幕(Intent.ACTION_USER_PRESENT),並且如果手機配置爲不鎖定屏幕,Intent.ACTION_USER_PRESENT不會發生。