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

Posted

技术标签:

【中文标题】以编程方式将锁屏设置为“无”?【英文标题】:Set lockscreen to "None" programmatically? 【发布时间】:2014-04-04 06:36:42 【问题描述】:

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

我尝试了一些方法无济于事。

试试 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

    执行以下 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);

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

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

【问题讨论】:

哪个安卓版本? 我在 Android 4.1 上运行 ***.com/questions/9724428/… - 希望对您有所帮助 我想听听你的进展。到目前为止有什么解决方案吗? 嗨,你找到解决办法了吗? 【参考方案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。

【讨论】:

运行第一个命令然后重新启动手机对我有用。 相关源码:github.com/android/platform_frameworks_base/blob/… 对于/data/data/com.android.providers.settings/databases/settings.db据说最好使用adb shell settings put secure lockscreen.disabled 1修改数据库。有没有类似的工具来修改locksettings.db而不是直接调用sqlite? @farmir 可以adb pull 那些文件,详细here。 这可以通过locksettings 命令更轻松地完成:adb shell locksettings set-disabled true【参考方案2】:

在 android source 中搜索了一下之后,我现在坚持使用 onPreferenceTreeClick 类的 onPreferenceTreeClick 函数,该函数似乎在选择解锁方法时调用(在首选项中)。

在该方法中调用updateUnlockMethodAndFinish 来设置解锁方法。所以也许调用updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED,true); 可能正是你想要的。

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

编辑: 这也有帮助:startFragment(this,"com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment",SET_OR_CHANGE_LOCK_METHOD_REQUEST, null);

【讨论】:

【参考方案3】:

使用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

【讨论】:

【参考方案4】:

我尝试按照@ByteHamster 的建议修改 /data/system/locksettings.db,但没有成功。

adb shell sqlite3 /data/system/locksettings.db "UPDATE locksettings SET value = '1' WHERE name = 'lockscreen.disabled'"

然后我将locksettings.db 重命名为locksettings.db.old 并重新启动。锁屏消失了,Android 重新构建了 locksettings.db 文件本身。

我在三星 Galaxy S4 上使用TWRP recovery。

【讨论】:

adb shell settings put secure lockscreen.disabled 1 这需要root设备吗?【参考方案5】:

您必须在 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() 中调用 acquire 并在 onPause() 中调用 release强>。

【讨论】:

谢谢,但这仅适用于应用程序运行时。这不会禁用设备的锁定屏幕。【参考方案6】:

我已经在root tablet中实现了,

以下是我的完整过程

adb push sqlite3 /sdcard/sqlite3

adb 外壳

mount -o remount,rw /system

cp /sdcard/sqlite3 /system/xbin/sqlite3

chmod 755 /system/xbin/sqlite3

mount -o remount,ro /system

adb shell sqlite3 /data/system/locksettings.db

UPDATE locksettings SET value = '1' WHERE name = 'lockscreen.disabled'

您可以从http://www.digitechhub.com/sqlite3下载文件

【讨论】:

【参考方案7】:

我想探索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 上发生了变化。

【讨论】:

【参考方案8】:

我知道这是一个迟到的答案,但您可以尝试命令行“locksettings set-disabled true”。 它非常适合我。

【讨论】:

【参考方案9】:

在根节点 5 上, 在终端通过 twrp 恢复我只是 rm /data/system/locksettings.db 并重启

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于以编程方式将锁屏设置为“无”?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置安卓锁屏图片

怎么样设置安卓手机锁屏密码

安卓手机怎么设置锁屏密码?

win10 锁屏界面的windows聚焦失灵了,锁屏成单色无图案。求解?

Windows 锁屏,以编程方式添加文本

怎样解除华为手机设置的防盗密码