Установить для экрана блокировки значение «Нет» программно?

У меня есть требование отключить экран блокировки и установить тип экрана блокировки на «Нет». Мое устройство имеет root-права (может работать с разрешением 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);

Есть ли что-нибудь еще, что я могу попробовать?

Обратите внимание, что я не хочу отключать блокировку клавиатуры только во время работы приложения.


person Ranhiru Jude Cooray    schedule 03.03.2014    source источник
comment
Какая версия андроида?   -  person exilit    schedule 03.03.2014
comment
Я работаю на Android 4.1   -  person Ranhiru Jude Cooray    schedule 03.03.2014
comment
stackoverflow.com/questions/9724428/ - надеюсь, это поможет   -  person Sanjeev    schedule 03.03.2014
comment
Я хотел бы услышать о вашем прогрессе. Любое решение до сих пор?   -  person exilit    schedule 03.03.2014
comment
Привет, ты нашел какое-нибудь решение этой проблемы?   -  person Caner    schedule 15.08.2014
comment
@RanhiruCooray чего-нибудь достиг?   -  person Muhammed Refaat    schedule 02.10.2014


Ответы (8)


Вы можете попробовать это:

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.

person superb    schedule 05.06.2014
comment
У меня сработала первая команда, а затем перезагрузка телефона. - person Caner; 15.08.2014
comment
Связанный исходный код: github. com/android/platform_frameworks_base/blob/ - person Zifei Tong; 10.07.2015
comment
Для /data/data/com.android.providers.settings/databases/settings.db сказано, что лучше всего использовать adb shell settings put secure lockscreen.disabled 1 для изменения базы данных. Есть ли аналогичная утилита для изменения locksettings.db вместо прямого вызова sqlite? - person farmir; 04.08.2015
comment
@farmir Можно adb pull эти файлы, как описано здесь. - person musically_ut; 06.04.2016
comment
Это можно сделать проще с помощью команды locksettings: adb shell locksettings set-disabled true - person Ber; 17.05.2021


используйте 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
person GorvGoyl    schedule 01.10.2018

Я попытался изменить /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 на Samsung Galaxy S4.

person jmatocha    schedule 24.10.2015
comment
Требуется ли для этого рутированное устройство или что-то в этом роде? - person Joshua Pinter; 27.05.2020

вы должны объявить это разрешение на использование в 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();

Я предложил вызывать acquire внутри onResume() вашей активности и release в onPause().

person Solution    schedule 03.03.2014
comment
Спасибо, но это ТОЛЬКО при запущенном приложении. Это не отключает экран блокировки устройства. - person Ranhiru Jude Cooray; 03.03.2014

Я получил корневую таблетку,

Ниже моя полная процедура

adb push sqlite3 /sdcard/sqlite3

adb оболочка

su

mount -o перемонтировать,rw /система

СР/sdcard/sqlite3/система/xbin/sqlite3

chmod 755 /система/xbin/sqlite3

mount -o перемонтировать,ро/система

adb shell sqlite3 /data/system/locksettings.db

ОБНОВЛЕНИЕ настроек блокировки SET значение = '1' ГДЕ имя = 'lockscreen.disabled'

Вы можете загрузить файл с http://www.digitechhub.com/sqlite3.

person Satheesh    schedule 27.05.2016

Я хотел бы изучить ответ 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.

person Yeung    schedule 06.10.2015

Я знаю, что это поздний ответ, но вы можете попробовать настроить блокировку командной строки set-disabled true.
Это отлично работает для меня.

person MadHatter    schedule 10.05.2021