2011-03-06 29 views
2

我正在製作一個應用程序,當用戶搖動手機時需要打開/關閉屏幕。到目前爲止,我已經有了一個SensorEventListener,它可以按照this question的回答中的建議監聽抖動。用搖晃在Android中打開/關閉屏幕

當我檢測到晃動時,我按照this question's answer中的建議更改了屏幕亮度的值。如果我實際上沒有關閉屏幕,那麼這一切都會很好......如果通過public void setBright(float value)方法將亮度設置爲0.01f,則它可以很好地工作。但是,如果我將亮度設置爲0.0f,手機將不會再次打開屏幕......直到至少按下電源按鈕。

是我想要做的可能嗎?我究竟做錯了什麼?

- 編輯 -

感謝Dreicyerasor我再進去看了問題。在我將亮度設置爲0.0f之前,我獲得PARTIAL_WAKE_LOCK,但是當我搖動手機時它仍然不亮。但是,當我調試應用程序時,我發現setBright(1.0f)在屏幕關閉時搖動手機時會被調用;我的懷疑是,鎖屏不知怎麼搞亂了,因爲當我按下電源按鈕時,它會開啓。按下電源按鈕後,應用程序會繼續像往常一樣繼續工作。有沒有辦法繞過鎖屏?

感謝您的幫助!

+0

你是否成功達到了這個要求? – Gajini 2013-08-30 07:31:48

+0

對不起,我的要求改變了,對我的項目來說不再是問題。我的最後是我最好的猜測:如果你停用鎖屏,它可能會工作。 – 2013-08-30 14:55:59

+0

我遇到類似的問題。但是我想知道當屏幕關閉時如何檢測設備的搖晃事件。 – Shikhar 2014-03-21 12:47:59

回答

1

只是一個猜測:將它設置爲brighnes 0.0也可能使手機進入睡眠模式?

當你想打開它重新編程,嘗試獲取ACQUIRE_CAUSES_WAKEUP激活鎖定:

PowerManager pm = (PowerManager)mContext.getSystemService(
              Context.POWER_SERVICE); 
PowerManager.WakeLock wl = pm.newWakeLock(
             PowerManager.SCREEN_BRIGHT_WAKE_LOCK 
             | PowerManager.ACQUIRE_CAUSES_WAKEUP, 
             TAG); 
wl.acquire(1000); 
1

我同意icyerasor的猜測,但是 - 如果猜測是正確的,手機睡覺你會要獲得PARTIAL_WAKE_LOCK保持清醒CPU設置亮度爲0.0

回答之前,我會測試這個之前,但我沒有在這個時刻訪問Android設備。

+0

我甚至會推薦SCREEN_BRIGHT_WAKE_LOCK。 ACQUIRE_CAUSES_WAKEUP只是一個額外的修改器。並且在使用PARTIAL_WAKE_LOCK時被忽略(至少你鏈接的文檔說的是這樣的哦,只是看到我複製了代碼而沒有執行標誌..編輯。 – icyerasor 2011-03-06 23:09:42

+0

是的,但是持有'SCREEN_BRIGHT_WAKE_LOCK',然後嘗試將亮度設置爲0可能會失敗,問題是CPU可能會進入休眠狀態,並且OP的代碼停止運行,他們需要保持'PARTIAL_WAKE_LOCK'來保持CPU的喚醒狀態並且它們的代碼正在運行 – Dre 2011-03-06 23:12:02

+0

啊好的,那麼他應該.acquire(), setBrightnesTo100(); .release(),對嗎? – icyerasor 2011-03-06 23:15:21