2016-07-15 61 views
0

我創建了一個帶有空Activity的目標API 15(ICS)的新項目。我添加的權限來體現:PARTIAL_WAKE_LOCK不起作用

<uses-permission android:name="android.permission.WAKE_LOCK" /> 

我添加代碼onCreate()

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     PowerManager pm = (PowerManager) getSystemService(getApplicationContext().POWER_SERVICE); 
     PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Tag"); 
     wl.acquire(); 

     WindowManager.LayoutParams params = getWindow().getAttributes(); 
     params.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; 
     params.screenBrightness = 0; 
     getWindow().setAttributes(params); 
    } 

但沒有與該設備發生。根據PowerManager documentation我預計屏幕將立即關閉。那麼,我做錯了什麼,或者這是行不通的?


編輯:

我試圖阿希什蘭詹的建議手動設置screenBrightness獲取激活鎖定後,然而,這也不起作用。

+0

你期待這將關閉顯示屏,瞬間? –

+0

我正在努力實現,是的。 –

+0

檢查答案 –

回答

0

我想你忘了補充一點:

wl.release(); 
+0

在'onPause()'中加入了這一行。沒有幫助(如我所料)。 –

+0

這是爲了釋放喚醒鎖,而不是打開它,並在您完成喚醒鎖時使用。從文檔:*此方法釋放你的CPU或屏幕上的聲明。屏幕可能會在您釋放喚醒鎖後立即關閉,或者如果仍然存在其他喚醒鎖,則屏幕可能不會顯示。* https://developer.android.com/reference/android/os/PowerManager.WakeLock.html#release () –

+0

但我試圖用'acquire()'關閉屏幕(並保持CPU打開)。 –

1

按了Android documentation,使用PARTIAL_WAKE_LOCK不會關閉屏幕。但是,當這種模式在WakeLock中有效時,它將允許屏幕熄滅。

因此,設備屏幕不會立即關閉,您必須等待屏幕超時(取決於設備顯示設置中設置的時間),但CPU將繼續運行。

PARTIAL_WAKE_LOCK

喚醒鎖級別:確保在CPU運行;屏幕和鍵盤背光將被允許熄滅。

如果用戶按下電源按鈕,屏幕將會關閉,但CPU將保持打開狀態,直到所有部分喚醒鎖定已釋放。

要關閉你就必須改變窗口的LayoutParams這樣的畫面:

WindowManager.LayoutParams params = getWindow().getAttributes(); 
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON; 
params.screenBrightness = 0; 
getWindow().setAttributes(params); 
+0

好的,謝謝你失蹤的信息。我讀過關於手動設置屬性的問題,但問題是我想從沒有GUI可用的服務(因此'getWindow'不起作用)執行此操作。將進一步搜索。 –

+0

你也可以從服務中做到這一點(當然使用不同的方法),但爲什麼你想關閉屏幕?一般這樣做並不是一個好主意。 –

+0

我知道我可以但我需要創建一個虛擬的活動,我在這個東西[見這個答案](http://stackoverflow.com/a/11306685/1181261)。我爲我的客戶有一個特殊用例,我需要這樣做。 –