以编程方式将锁屏设置为“无”?

2022-09-02 20:56:13

我需要禁用锁定屏幕并将锁定屏幕类型设置为“无”。我的设备已植根(可以使用 SU 权限运行)+ 可以作为具有系统权限的系统应用程序运行(在 /system/app 下)。

我尝试了一些事情,但无济于事。

尝试 1

这似乎已被弃用且不起作用。

KeyguardManager manager = (KeyguardManager) this.getSystemService(KEYGUARD_SERVICE);
KeyguardLock lock = manager.newKeyguardLock("abc");
lock.disableKeyguard(); 

尝试 2

这也不起作用。

  1. 将系统分区挂载为可写
  2. 编辑/data/data/com.android.providers.settings/databases/settings.db
  3. 执行以下 SQL。

    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);

还有什么我可以尝试的吗?

请注意,我不想仅在应用程序运行时禁用键盘锁。


答案 1

你可以试试这个:

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。


答案 2

在Android源代码中搜索了一点之后,我现在坚持在一个名为PreferenceTreeClick的函数中,该函数似乎在选择解锁方法时(在首选项中)被调用。ChooseLockGeneric

在该方法中,updateUnlockMethodAndFinish被调用,它设置解锁方法。因此,也许打电话可能正是您想要的。updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED,true);

我不知道这是否符合您的需求,也不知道这是否有效(也许存在任何可见性问题或安全机制)。我只是在猜测。

编辑:这也可能会有所帮助:startFragment(this,“com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment”,SET_OR_CHANGE_LOCK_METHOD_REQUEST,null);


推荐