屏幕解鎖方式一:
這種方式是目前用的比較多的方式,使用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"