锁屏设置为“无”编程?

问题描述 投票:13回答:7

我要禁用锁定屏幕,并设置锁屏类型为“无”的要求。我的设备根(可以用SU权限运行)+可以与系统权限的系统中的应用(下/系统/应用程序)上运行。

我已经尝试了几件事情都无济于事。

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

还有什么我可以试试吗?

请注意,我不想禁用,只有当应用程序正在运行的键盘锁。

java android lockscreen
7个回答
14
投票

你可以试试这个:

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。


4
投票

在android source搜索一点点后,我现在坚持一个从类onPreferenceTreeClick这似乎当选择(在首选项)的解锁方法被称为所谓的ChooseLockGeneric函数内。

在该方法中updateUnlockMethodAndFinish被称为设定所述解锁方法。因此,也许调用updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED,true);可能正是你想要的。

我不知道这是否适合您的需要,不知道这是否工作(也许有任何知名度的问题或安全机制)。我只是猜测。

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


2
投票

我试图修改/data/system/locksettings.db如被@ByteHamster建议,没有运气。

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

然后我改名为locksettings.dblocksettings.db.old并重新启动。锁屏不见了和Android重建locksettings.db文件本身。

我使用TWRP recovery在三星Galaxy S4。


2
投票

您必须声明该使用许可权的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(释放)内获取。


0
投票

我在根平板电脑实现,

下面是我的全过程

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'

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


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

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个。

© www.soinside.com 2019 - 2024. All rights reserved.