Android中系統(tǒng)自帶鎖WalkLock與KeyguardLock用法實(shí)例詳解
本文實(shí)例講述了Android中系統(tǒng)自帶鎖WalkLock與KeyguardLock用法。分享給大家供大家參考,具體如下:
WalkLock - 顧名思義 喚醒鎖 點(diǎn)亮屏幕用的
KeyguardLock - 顧名思義 鍵盤鎖 解鎖鍵盤用的
詳細(xì)介紹:
1: WalkLock 喚醒鎖
- WalkLock真的能點(diǎn)亮屏幕嗎?
答案是肯定的。 可是有時(shí)候?yàn)槭裁床稽c(diǎn)亮屏幕,這個(gè)就是參數(shù)設(shè)置的問(wèn)題了。
PowerManager.FULL_WAKE_LOCK 這個(gè)參數(shù)是手機(jī)點(diǎn)亮的程度,(什么Cpu,屏幕亮度,鍵盤燈)
PowerManager.ACQUIRE_CAUSES_WAKEUP 關(guān)鍵是這個(gè)參數(shù)的理解。
WalkLock點(diǎn)亮屏幕并非真的去點(diǎn)亮了屏幕,你可以理解為,它通過(guò)Android組件(Activity)去點(diǎn)亮了屏幕。
假如一個(gè)通知想去點(diǎn)亮屏幕,問(wèn)題來(lái)了,它能點(diǎn)亮嗎? 肯定不行。
不過(guò)擁有這個(gè)PowerManager.ACQUIRE_CAUSES_WAKEU參數(shù),你就可以點(diǎn)亮屏幕了。它使WalkLock不再依賴組件就可以點(diǎn)亮屏幕了。
- WalkLock如何獲得屏幕的狀態(tài)?
PowerManager.isScreenOn()方法;這個(gè)方法返回true: 屏幕是喚醒的 返回false:屏幕是休眠的
- WalkLock喚醒和休眠的方法?
WalkLock.aquire() 在屏幕休眠的狀態(tài)下喚醒屏幕
WalkLock.release() 在屏幕點(diǎn)亮的狀態(tài)下,使屏幕休眠。
WalkLock.release()這個(gè)方法有個(gè)需要注意的地方:
例如:WalkLockA對(duì)象先喚醒了屏幕再使屏幕休眠,ok沒(méi)問(wèn)題
屏幕本身就是喚醒狀態(tài),WalkLockA對(duì)象沒(méi)有喚醒過(guò)屏幕,WalkLockA對(duì)象如果嘗試使屏幕休眠。會(huì)產(chǎn)生一個(gè)異常 UnLock Sreen。
2:KeyguardLock 鍵盤鎖
- KeyguardLock獲得當(dāng)前屏幕是否解鎖?
KeygroundManager.inKeyguardRestrictedInputMode() 返回true表示鍵盤鎖住, 返回false表示鍵盤解鎖中
- KeyguardLock給屏幕解鎖和上鎖?
KeyguardLock.disableKeyguard()解鎖鍵盤
KeyguardLock.reenableKeyguard()鎖鍵盤
KeyguardLock沒(méi)有上面喚醒鎖的問(wèn)題,就是無(wú)論你鍵盤是否由KeyguardLockA解鎖,你調(diào)用KeyguardLockA對(duì)象的reenableKeyguard()方法都不會(huì)有異常。
這兩把鎖一些概念性的理解,假如你認(rèn)為你獲得了一個(gè)鍵盤鎖對(duì)象,你就可以鎖屏幕了。這個(gè)就大錯(cuò)特錯(cuò)了。
你鎖不了其他程序打開(kāi)的屏幕(如果可以的話,一個(gè)for循環(huán)一直鎖你屏幕,你哭都沒(méi)眼淚)
你可以控制自己的鎖,別想著別人的鎖。
最后總結(jié)下用法:
一般這兩把鎖都是配合使用的,你解鎖屏幕的時(shí)候肯定不希望屏幕漆黑一片。關(guān)閉鍵盤鎖的時(shí)候希望屏幕也同時(shí)休眠。
問(wèn)題:
1:我嘗試手動(dòng)關(guān)閉屏幕,可是總繼續(xù)亮那么一小會(huì)。
2:如果手機(jī)自動(dòng)關(guān)閉屏幕的話,不會(huì)有這個(gè)問(wèn)題。
public void unlockScreen() { // 獲取PowerManager的實(shí)例 PowerManager pm = (PowerManager) mContext .getSystemService(Context.POWER_SERVICE); // 得到一個(gè)WakeLock喚醒鎖 mWakelock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "SimpleTimer"); if (!mWakelock.isHeld()) { // 喚醒屏幕 mWakelock.acquire(); } // 獲得一個(gè)KeyguardManager的實(shí)例 km = (KeyguardManager) mContext .getSystemService(Context.KEYGUARD_SERVICE); // 得到一個(gè)鍵盤鎖KeyguardLock mKeyguardLock = km.newKeyguardLock("SimpleTimer"); if (km.inKeyguardRestrictedInputMode()) { // 解鎖鍵盤 mKeyguardLock.disableKeyguard(); } }
注意,這里使用的mWakelock.isHeld())來(lái)判斷屏幕當(dāng)前是否是休眠狀態(tài),從Android 2.1 API Level7開(kāi)始增加了一個(gè)判斷屏幕是否處于點(diǎn)亮狀態(tài)可以使用public boolean isScreenOn ()這個(gè)方法。
鎖屏幕的代碼是
public void lockScreen() { // release screen if (!km.inKeyguardRestrictedInputMode()) { // 鎖鍵盤 mKeyguardLock.reenableKeyguard(); } // 使屏幕休眠 if (mWakelock.isHeld()) { mWakelock.release(); } }
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android入門之TextClock的使用教程
- Android服務(wù)應(yīng)用ClockService實(shí)現(xiàn)鬧鐘功能
- Android自定義DigitalClock控件實(shí)現(xiàn)商品倒計(jì)時(shí)
- Android ScreenLockReceiver監(jiān)聽(tīng)鎖屏功能示例
- Android應(yīng)用程序保持后臺(tái)喚醒(使用WakeLock實(shí)現(xiàn))
- Android DigitalClock組件用法實(shí)例
- Android AnalogClock簡(jiǎn)單使用方法實(shí)例
- Android控件之AnalogClock與DigitalClock用法實(shí)例分析
- Android Lock鎖實(shí)現(xiàn)原理詳細(xì)分析
相關(guān)文章
RecyclerView實(shí)現(xiàn)側(cè)滑和網(wǎng)絡(luò)斷點(diǎn)續(xù)傳
這篇文章主要為大家詳細(xì)介紹了RecyclerView實(shí)現(xiàn)側(cè)滑和網(wǎng)絡(luò)斷點(diǎn)續(xù)傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07android上一個(gè)可追蹤代碼具體到函數(shù)某行的日志類
追蹤代碼到函數(shù)具體某行,這樣的功能,是每一個(gè)程序員都希望會(huì)有的,因?yàn)樗梢詭椭覀冏粉櫟侥承写a的錯(cuò)誤,接下來(lái)介紹下android上一個(gè)可追蹤代碼到函數(shù)具體某行的日志類,希望對(duì)開(kāi)發(fā)者有所幫助2012-12-12Android TimerTask 的簡(jiǎn)單應(yīng)用及注意事項(xiàng)
這篇文章主要介紹了Android TimerTask 的簡(jiǎn)單應(yīng)用及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2017-06-06android實(shí)現(xiàn)節(jié)點(diǎn)進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)節(jié)點(diǎn)進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android實(shí)現(xiàn)語(yǔ)音播放與錄音功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)語(yǔ)音播放與錄音功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Android Compose自定義TextField實(shí)現(xiàn)自定義的輸入框
眾所周知Compose中默認(rèn)的TextField和OutlineTextField樣式并不能滿足所有的使用場(chǎng)景,所以自定義TextField就成了必備技能。本文將自定義TextField實(shí)現(xiàn)自定義的輸入框,感興趣的可以了解一下2022-03-03Android實(shí)現(xiàn)電池管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)電池管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01Android開(kāi)發(fā)中Intent.Action各種常見(jiàn)的作用匯總
今天小編就為大家分享一篇關(guān)于Android開(kāi)發(fā)中Intent.Action各種常見(jiàn)的作用匯總,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12Android 帶進(jìn)度條的WebView 示例代碼
本文主要介紹Android WebView,這里提供實(shí)例代碼,和效果圖供大家參考,希望能幫助有需要的小伙伴2016-07-07