我要禁用锁定屏幕,并设置锁屏类型为“无”的要求。我的设备根(可以用SU权限运行)+可以与系统权限的系统中的应用(下/系统/应用程序)上运行。
我已经尝试了几件事情都无济于事。
尝试1
这似乎是过时和不工作。
KeyguardManager manager = (KeyguardManager) this.getSystemService(KEYGUARD_SERVICE);
KeyguardLock lock = manager.newKeyguardLock("abc");
lock.disableKeyguard();
尝试2
这也不能工作。
/data/data/com.android.providers.settings/databases/settings.db
INSERT OR REPLACE INTO system (name, value) VALUES ('lockscreen.disabled', '1');
INSERT OR REPLACE INTO secure (name, value) VALUES ('lockscreen.disabled', '1');
尝试3
重新启动机器,但仍然没有运气。
android.provider.Settings.Secure.putLong(mContentResolver, Settings.Secure.LOCK_PATTERN_ENABLED, false);`
android.provider.Settings.Secure.putLong(mContentResolver, "lockscreen.password_type", DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);`
android.provider.Settings.Secure.putLong(mContentResolver, "lockscreen.password_type_alternate", DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
android.provider.Settings.Secure.putLong(mContentResolver, "lockscreen.disabled", true);
还有什么我可以试试吗?
请注意,我不想禁用,只有当应用程序正在运行的键盘锁。
你可以试试这个:
adb shell sqlite3 /data/system/locksettings.db "UPDATE locksettings SET value = '1' WHERE name = 'lockscreen.disabled'"
adb shell sqlite3 /data/system/locksettings.db "UPDATE locksettings SET value = '0' WHERE name = 'lockscreen.password_type'"
adb shell sqlite3 /data/system/locksettings.db "UPDATE locksettings SET value = '0' WHERE name = 'lockscreen.password_type_alternate'"
它适用于我的根的Nexus 4。
在android source搜索一点点后,我现在坚持一个从类onPreferenceTreeClick
这似乎当选择(在首选项)的解锁方法被称为所谓的ChooseLockGeneric
函数内。
在该方法中updateUnlockMethodAndFinish
被称为设定所述解锁方法。因此,也许调用updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED,true);
可能正是你想要的。
我不知道这是否适合您的需要,不知道这是否工作(也许有任何知名度的问题或安全机制)。我只是猜测。
我试图修改/data/system/locksettings.db如被@ByteHamster建议,没有运气。
adb shell sqlite3 /data/system/locksettings.db "UPDATE locksettings SET value = '1' WHERE name = 'lockscreen.disabled'"
然后我改名为locksettings.db
到locksettings.db.old
并重新启动。锁屏不见了和Android重建locksettings.db
文件本身。
我使用TWRP recovery在三星Galaxy S4。
您必须声明该使用许可权的AndroidManifest:
<uses-permission android:name="android.permission.WAKE_LOCK" />
而在你的代码:
PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Lock");
wakeLock.acquire();
当应用程序被破坏或暂停使用下释放此锁:
wakeLock.release();
我建议打电话给你活动的onResume()和的onPause(释放)内获取。
我在根平板电脑实现,
下面是我的全过程
ADB推sqlite3的/ SD卡/ sqlite3的
亚行外壳
他的
安装-o重新装入,RW /系统
CP / SD卡/ sqlite3的/系统/ XBIN / sqlite3的
搭配chmod 755 /系统/ XBIN / sqlite3的
安装-o重新装入,RO /系统
亚行外壳sqlite3的/data/system/locksettings.db
UPDATE SET locksettings值= '1' WHERE NAME = 'lockscreen.disabled'
使用adb shell locksettings clear --old xxxx
立即除去锁屏锁(即使当手机处于锁定状态)xxxx
是模式号,请参阅下面的图像。例如:locksettings clear --old 1236
若要再次设定模式使用:locksettings set-pattern 1236
用法:
locksettings set-pattern [--old OLD_CREDENTIAL] NEW_PATTERN
locksettings set-pin [--old OLD_CREDENTIAL] NEW_PIN
locksettings set-password [--old OLD_CREDENTIAL] NEW_PASSWORD
locksettings clear [--old OLD_CREDENTIAL]
locksettings verify [--old OLD_CREDENTIAL]
locksettings set-disabled DISABLED
locksettings get-disabled
我想探索exilit答案。从源头上,我们终于进入这个:
mChooseLockSettingsHelper.utils().clearLock(false);
mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled);
该utils的是com.android.internal.widget.LockPatternUtils
对象,我们可以通过反射某种方式得到它。下面是代码:
try{
Class lockPatternUtilsCls = Class.forName("com.android.internal.widget.LockPatternUtils");
Constructor lockPatternUtilsConstructor =
lockPatternUtilsCls.getConstructor(new Class[]{Context.class});
Object lockPatternUtils = lockPatternUtilsConstructor.newInstance(MyActivity.this);
Method clearLockMethod = lockPatternUtils.getClass().getMethod("clearLock", boolean.class);
Method setLockScreenDisabledMethod = lockPatternUtils.getClass().getMethod("setLockScreenDisabled", boolean.class);
clearLockMethod.invoke(lockPatternUtils, false);
setLockScreenDisabledMethod.invoke(lockPatternUtils, true);
Log.d(TAG, "set lock screen to NONE SUC");
}catch(Exception e){
Log.e(TAG, "set lock screen to NONE failed", e);
}
那么我的测试程序是与平台密钥和系统的应用程序签名。我认为这将是必须的。
更新:注意到,方法参数是在Android上更改了6个。