Android 說說亮屏鎖和鍵盤鎖
阿新 • • 發佈:2019-02-01
Android中的兩把鎖 – WalkLock and KeyguardLock 詳細分析
WalkLock – 顧名思義 喚醒鎖 點亮螢幕用的
KeyguardLock – 顧名思義 鍵盤鎖 解鎖鍵盤用的
詳細介紹:
1: WalkLock 喚醒鎖
WalkLock真的能點亮螢幕嗎?
答案是肯定的。 可是有時候為什麼不點亮螢幕,這個就是引數設定的問題了。
java程式碼:
WalkLock點亮螢幕並非真的去點亮了螢幕,你可以理解為,它通過Android元件(Activity)去點亮了螢幕。
假如一個通知想去點亮螢幕,問題來了,它能點亮嗎? 肯定不行。
不過擁有這個PowerManager.ACQUIRE_CAUSES_WAKEU引數,你就可以點亮螢幕了。它使WalkLock不再依賴元件就可以點亮螢幕了。
WalkLock如何獲得螢幕的狀態?
PowerManager.isScreenOn()方法;這個方法返回true: 螢幕是喚醒的返回false:螢幕是休眠的
WalkLock喚醒和休眠的方法?
WalkLock.aquire() 在螢幕休眠的狀態下喚醒螢幕
WalkLock.release() 在螢幕點亮的狀態下,使螢幕休眠。
WalkLock.release()這個方法有個需要注意的地方:
例如:WalkLockA物件先喚醒了螢幕再使螢幕休眠。
螢幕本身就是喚醒狀態,WalkLockA物件沒有喚醒過螢幕,WalkLockA物件如果嘗試使螢幕休眠。會產生一個異常 UnLock Sreen。
2:KeyguardLock 鍵盤鎖
KeyguardLock獲得當前螢幕是否解鎖?
KeygroundManager.inKeyguardRestrictedInputMode() 返回true表示鍵盤鎖住, 返回false表示鍵盤解鎖中
KeyguardLock給螢幕解鎖和上鎖?
KeyguardLock.disableKeyguard()解鎖鍵盤
KeyguardLock.reenableKeyguard()鎖鍵盤
KeyguardLock沒有上面喚醒鎖的問題,就是無論你鍵盤是否由KeyguardLockA解鎖,你呼叫KeyguardLockA
物件的reenableKeyguard()方法都不會有異常。
這兩把鎖一些概念性的理解,假如你認為你獲得了一個鍵盤鎖物件,你就可以鎖螢幕了。這個就大錯特錯了。
你鎖不了其他程式開啟的螢幕(如果可以的話,一個for迴圈一直鎖你螢幕,你哭都沒眼淚)
你可以控制自己的鎖,別想著別人的鎖。
最後總結下用法:
一般這兩把鎖都是配合使用的,你解鎖螢幕的時候肯定不希望螢幕漆黑一片。關閉鍵盤鎖的時候希望螢幕也同時休眠。
問題:
1:我嘗試手動關閉螢幕,可是總繼續亮那麼一小會。
2:如果手機自動關閉螢幕的話,不會有這個問題。
主要程式碼展示:
java程式碼:
java程式碼:
WalkLock – 顧名思義 喚醒鎖 點亮螢幕用的
KeyguardLock – 顧名思義 鍵盤鎖 解鎖鍵盤用的
詳細介紹:
1: WalkLock 喚醒鎖
WalkLock真的能點亮螢幕嗎?
答案是肯定的。 可是有時候為什麼不點亮螢幕,這個就是引數設定的問題了。
java程式碼:
- PowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "Gank");
- PowerManager.FULL_WAKE_LOCK //這個引數是手機點亮的程度,(什麼Cpu,螢幕亮度,鍵盤燈)
- PowerManager.ACQUIRE_CAUSES_WAKEUP //關鍵是這個引數的理解。
WalkLock點亮螢幕並非真的去點亮了螢幕,你可以理解為,它通過Android元件(Activity)去點亮了螢幕。
假如一個通知想去點亮螢幕,問題來了,它能點亮嗎? 肯定不行。
不過擁有這個PowerManager.ACQUIRE_CAUSES_WAKEU引數,你就可以點亮螢幕了。它使WalkLock不再依賴元件就可以點亮螢幕了。
WalkLock如何獲得螢幕的狀態?
PowerManager.isScreenOn()方法;這個方法返回true: 螢幕是喚醒的返回false:螢幕是休眠的
WalkLock喚醒和休眠的方法?
WalkLock.aquire() 在螢幕休眠的狀態下喚醒螢幕
WalkLock.release() 在螢幕點亮的狀態下,使螢幕休眠。
WalkLock.release()這個方法有個需要注意的地方:
例如:WalkLockA物件先喚醒了螢幕再使螢幕休眠。
螢幕本身就是喚醒狀態,WalkLockA物件沒有喚醒過螢幕,WalkLockA物件如果嘗試使螢幕休眠。會產生一個異常 UnLock Sreen。
2:KeyguardLock 鍵盤鎖
KeyguardLock獲得當前螢幕是否解鎖?
KeygroundManager.inKeyguardRestrictedInputMode() 返回true表示鍵盤鎖住, 返回false表示鍵盤解鎖中
KeyguardLock給螢幕解鎖和上鎖?
KeyguardLock.disableKeyguard()解鎖鍵盤
KeyguardLock.reenableKeyguard()鎖鍵盤
KeyguardLock沒有上面喚醒鎖的問題,就是無論你鍵盤是否由KeyguardLockA解鎖,你呼叫KeyguardLockA
物件的reenableKeyguard()方法都不會有異常。
這兩把鎖一些概念性的理解,假如你認為你獲得了一個鍵盤鎖物件,你就可以鎖螢幕了。這個就大錯特錯了。
你鎖不了其他程式開啟的螢幕(如果可以的話,一個for迴圈一直鎖你螢幕,你哭都沒眼淚)
你可以控制自己的鎖,別想著別人的鎖。
最後總結下用法:
一般這兩把鎖都是配合使用的,你解鎖螢幕的時候肯定不希望螢幕漆黑一片。關閉鍵盤鎖的時候希望螢幕也同時休眠。
問題:
1:我嘗試手動關閉螢幕,可是總繼續亮那麼一小會。
2:如果手機自動關閉螢幕的話,不會有這個問題。
主要程式碼展示:
java程式碼:
- KeyguardManager keyguardManager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE);
- KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("隨便寫點啥都行");
- keyguardLock.disableKeyguard();
java程式碼:
- /**
- * 點亮螢幕
- */
- private void lightScreen(){
- PowerManager powerManager = (PowerManager) this.getSystemService(Context.POWER_SERVICE);
- WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK|PowerManager.ACQUIRE_CAUSES_WAKEUP,"" );
- wakeLock.acquire();
- }