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

时间:2014-03-03 09:28:48

标签: java android lockscreen

我要求禁用锁定屏幕并将锁定屏幕类型设置为“无”。我的设备已植根(可以使用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');

  4. 尝试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);
    

    还有什么可以尝试吗?

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

8 个答案:

答案 0 :(得分:13)

你可以试试这个:

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.

答案 1 :(得分:4)

在android source中搜索了一下之后,我现在在类ChooseLockGeneric的一个名为onPreferenceTreeClick的函数中,它似乎在选择了解锁方法时被调用(在喜好)。

在该方法中调用updateUnlockMethodAndFinish来设置解锁方法。因此,调用updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED,true);可能正是您想要的。

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

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

答案 2 :(得分:2)

你必须在AndroidManifest上声明这个uses-permission:

<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()中调用发布

答案 3 :(得分:2)

我按照@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上使用hudson.model.User

答案 4 :(得分:1)

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

答案 5 :(得分:0)

我想探讨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上的方法参数已更改。

答案 6 :(得分:0)

我已经在根片中实现了

以下是我的完整程序

adb push sqlite3 / sdcard / sqlite3

adb shell

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 =&#39; 1&#39;名称=&#39; lockscreen.disabled&#39;

您可以从http://www.digitechhub.com/sqlite3

下载该文件

答案 7 :(得分:0)

使用adb shell locksettings clear --old xxxx立即解除锁屏锁定(即使手机处于锁定状态) xxxx是图案编号,请参见下图。 示例:locksettings clear --old 1236

要再次设置模式,请使用:locksettings set-pattern 1236

enter image description here


用法:

   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