簡體   English   中英

以編程方式從另一個線程關閉Android手機中的屏幕

[英]programmatically turn screen off in Android phone from another thread

我正在嘗試關閉Android手機的屏幕。

我閱讀了許多其他討論,並嘗試了兩種此處描述的方法: 在Android上關閉屏幕

實際上,我真正需要做的是啟動鎖定屏幕(要求輸入PIN碼的屏幕)。 我不確定該怎么做,也找不到有關它的文檔,所以我試圖關閉屏幕,希望當我重新打開手機時它會顯示鎖定屏幕。 不幸的是,我無法檢驗我的理論。

第一種選擇:

PowerManager manager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Your Tag");    
wl.acquire();    
wl.release();

第二種選擇:

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

第一個選項什么都不做,第二個選項導致我的應用崩潰。 在堆棧調用中,我看到了一個可疑的日志: Only the original thread that created a view hierarchy can touch its views. 我確實是從另一個在后台運行的線程(不是主線程)調用此代碼的。
這是否可能導致崩潰? 我該如何克服這個問題?
還有另一種方法可以以編程方式啟動鎖定屏幕,而不必關閉屏幕嗎?

在第一個選項中,還要添加ACQUIRE_CAUSES_WAKEUP。 這將喚醒屏幕並顯示鎖定屏幕。

PowerManager.WakeLock wl = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "Your Tag");    

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM