android 屏幕解鎖方式

屏幕解鎖方式一:

這種方式是目前用的比較多的方式,使用KeyguardManager 的方式來解鎖,使用這種方式比較簡便一點,但是也有一點不好的地方,它用在程序中,當程序退出機器重啟後,這種效果就沒有了,達不到長久解鎖的效果.

KeyguardManager的應用:

KeyguardManager Manger = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
KeyguardLock mLock = Manager.newKeyguardLock("unlock");
mLock.disableKeyguard();

使用完成後要對它進行:

mLock.reenableKeyguard();

使用keyguardManager要在manifest中添加:

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

屏幕解鎖方式二:

使用這種方式,可能覺得比較麻煩一點.它來源于google的setting源碼,跟椐鎖屏的那部分源碼更改過來的,跟椐本人的實驗可行.它的好處就是它能從根本上解決鎖屏的問題.直接把目前的鎖屏方式改為none的模式;在這種情況下,不管機器重啟還是退出程序,機器都不會再鎖屏了.它的不好的地方就是因為來源于源碼,所以要在源碼中進行編譯,直接使用會出錯的情況.

下面是代碼:

private void updateUnlockMethodAndFinish(int quality, boolean disabled) {
		// TODO Auto-generated method stub
		
        int minQuality = mDevicePolicyManager.getPasswordQuality(null);
        if (quality < minQuality) {
            quality = minQuality;
        }
        quality = upgradeQualityForEncryption(quality);

        if (quality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) {
        } else if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {
        	mLockPatternUtils.clearLock(true);
        	mLockPatternUtils.setLockScreenDisabled(disabled);
        }
	}
	private int upgradeQualityForEncryption(int quality) {
        int encryptionStatus = mDevicePolicyManager.getStorageEncryptionStatus();
        boolean encrypted = (encryptionStatus == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE)
                || (encryptionStatus == DevicePolicyManager.ENCRYPTION_STATUS_ACTIVATING);
        if (encrypted) {
            if (quality < DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) {
                quality = DevicePolicyManager.PASSWORD_QUALITY_NUMERIC;
            }
        }
        return quality;
    }

 使用這種方式,要獲取系統權限:

android.uid.system

屏幕解鎖方式三:

使用这种方式,可以直接在代码中使用,不需要在源码中重新build.

private void clearLock() {
		try {
			Class<?> c = Class.forName("com.android.internal.widget.LockPatternUtils");
			Constructor<?>[] constructors = c.getDeclaredConstructors();
			Constructor<?> constructor = constructors[0];
			constructor.setAccessible(true);
			Object clazz = constructor.newInstance(this);
			Method clearLockMethod = clazz.getClass().getDeclaredMethod("clearLock", boolean.class);
			clearLockMethod.setAccessible(true);
			clearLockMethod.invoke(clazz, false);

			Method setLockScreenDisabledMethod = clazz.getClass().getDeclaredMethod(
					"setLockScreenDisabled", boolean.class);
			setLockScreenDisabledMethod.setAccessible(true);
			setLockScreenDisabledMethod.invoke(clazz, true);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}

 这种方式也需要系统权限:

android:sharedUserId="android.uid.system"

猜你喜欢

转载自bgj.iteye.com/blog/1739357