概述
Android中有兩把鎖WalkLock和KeyguardLock:
- WalkLock - 即喚醒鎖,用來點亮螢幕的
- KeyguardLock - 即鍵盤鎖,用來解鎖鍵盤的
WalkLock 喚醒鎖
WalkLock可以用來點亮螢幕。
獲得喚醒鎖
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP, "Gank");
參數說明:
- PowerManager.FULL_WAKE_LOCK 指定手機點亮的程度
- PowerManager.ACQUIRE_CAUSES_WAKEUP WalkLock點亮螢幕並非真的去點亮了螢幕,可以理解為,它通過Android組件(Activity)去點亮了螢幕。如果一個通知想去點亮螢幕,那 是不行的,但是如果設定了PowerManager.ACQUIRE_CAUSES_WAKEU這個參數,就可以點亮螢幕了。它使WalkLock不再依 賴組件就可以點亮螢幕。
獲得螢幕當前的狀態
boolean state=wl.isScreenOn();//返回true時螢幕是喚醒的,返回false時螢幕是休眠的。
喚醒和休眠
wl.aquire(); //在螢幕休眠的狀態下喚醒螢幕wl.release(); //在螢幕點亮的狀態下,使螢幕休眠。
說明:
wl.release()這個方法有個需要注意的地方:如果wl先喚醒了螢幕再使螢幕休眠沒有問題;如果螢幕本身就是喚醒狀態,wl沒有喚醒過螢幕,這時wl如果嘗試使螢幕休眠,會產生一個UnLock Sreen異常。
KeyguardLock 鍵盤鎖獲得鍵盤鎖
KeyguardManager km = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);KeyguardLock kl = km.newKeyguardLock("KUnLock");
獲得鍵盤鎖狀態
boolean state = km.inKeyguardRestrictedInputMode(); //返回true表示鍵盤鎖住,返回false表示鍵盤未解鎖
解鎖和上鎖
kl.disableKeyguard(); //解鎖鍵盤kl.reenableKeyguard(); //鎖鍵盤
說明:
- KeyguardLock沒有喚醒鎖上面的問題,即無論鍵盤是否由kl解鎖,調用kl的reenableKeyguard()方法都不會有異常。
若果程式獲得了一個鍵盤鎖對象,並不能保證鎖住螢幕。因為本程式鎖不了其他程式開啟的螢幕(如果可以的話,一個for迴圈就能永遠住螢幕了)。所以只可以控制自己的鎖,無法控制別人的鎖。
總結
一般兩把鎖都是配合使用的,解鎖鍵盤的時候一般都需要點亮螢幕;鎖鍵盤時一般也希望螢幕同時休眠。