Android 屏蔽系统锁屏的方法
對于有些應用需要在某些時候屏蔽掉系統的鎖屏,當然這里面的屏蔽系統鎖屏指的是用戶沒有設置pin、圖案、數字等密碼的情況,一般這種情況我們是屏蔽不了的,這里屏蔽的鎖屏是指「無密碼的情況下」
1、KeyguardManager.KeyguardLock
1、KeyguardManager這是系統提供的管理系統鎖屏的,基本關于鎖屏的一些操作都有直接對應的方法,例如判斷是否鎖屏、判斷是否安全模式、不允許系統鎖屏、重新授予鎖屏等方法。但是屏蔽鎖屏我們用的 KeyguardManager.KeyguardLock 這個類的 disableKeyguard() 方法。不過特別說明一下,這個類在api13就被拋棄掉了,所以在版本是需要做兼容。
KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);KeyguardManager.KeyguardLock keyguardLock = keyguardManager.newKeyguardLock(ONLYLOCK);keyguardLock.disableKeyguard();2、通過設置頂層窗口的flag來屏蔽系統鎖屏
1、這個方法,主要靠的activity去過去當前最頂層的窗口,去設置flag來達到屏蔽鎖屏的方法,也是谷歌目前建議的方法。其實也是設置懸浮窗的屬性啦,這一塊熟悉懸浮窗屬性的同學,應該不陌生,我直接上代碼吧。注意:設置窗口的flag,要在setContentView之前設置哦,否則不生效。
private void setKeyguardEnable(boolean enable) {//disableif (!enable) {getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);return;}//enablegetWindow().clearFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);}3、利用系統隱藏的方法類
1、其實如果你有用了上面的兩個方法,去屏蔽系統鎖屏,你會發現,這兩個方法對大部分機型是可行的,但是還是有一部分機型,屏蔽不成功。下面介紹的第三種方法,雖然不太建議,但是確實能比上述兩個方法,效果更好。那就是利用系統hide的類和方法。
2、細心的同學會發現 KeyguardManager 里面真正起作用的是 IWindowManager 的類,但是我們看不了 IWindowManager 里面的代碼,這是因為 google 把這個類隱藏掉了,但是我們去 GitHub 上找,還是能找到這個類的源碼。找到源碼,我們可以看到這個 IWindowManager 類里面有個 dismissKeyguard() 的方法。
3、既然知道這個隱藏類,有這個 dismiss 鎖屏的方法,要怎么調用呢?我們需要把這個類的源碼 copy 到我們的項目中,注意包名一定要跟源碼的一致。(大家也可以,依賴這個開源庫,這個庫是吧 google 隱藏的代碼,全部開放,不過這個直接依賴,要注意使用到的隱藏的類,日后有可能被 google 拋棄,所以可能會有風險,庫的地址 : https://github.com/anggrayudi/android-hidden-api)
4、代碼,通過反射出這個類,然后再使用里面的方法
public static void dismissKeyguard() {if ((Build.VERSION.SDK_INT >= 18) && (Build.VERSION.SDK_INT <= 25)) {try {Class<?> mClass = Class.forName("android.view.WindowManagerGlobal");Method window = mClass.getMethod("getWindowManagerService");IWindowManager mIWindowManager = (IWindowManager) window.invoke(mClass);mIWindowManager.dismissKeyguard();} catch (Exception e) {e.printStackTrace();}}}4、最后
1、千萬不要忘了在AndroidManifast.xml里面加入權限聲明:
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>總結
以上是生活随笔為你收集整理的Android 屏蔽系统锁屏的方法的全部內容,希望文章能夠幫你解決所遇到的問題。