Подтвердить что ты не робот

Установите программный код блокировки на "Нет"?

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

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

Обратите внимание, что Я не хочу отключать блокировку клавиатуры только тогда, когда приложение запущено.

4b9b3361

Ответ 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 source, я теперь вхожу в функцию под названием onPreferenceTreeClick из класса ChooseLockGeneric, который, как представляется, вызывается при выборе метода разблокировки (в настройках).

В этом методе updateUnlockMethodAndFinish вызывается, который устанавливает метод разблокировки. Поэтому, возможно, вызов updateUnlockMethodAndFinish(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED,true); может быть именно тем, что вы хотите.

Я не знаю, соответствует ли это вашим потребностям и не знает, работает ли это (возможно, есть проблемы с видимостью или механизмы безопасности). Я просто размышляю.

EDIT: Это также может помочь: startFragment(this,"com.android.settings.ChooseLockGeneric$ChooseLockGenericFragment",SET_OR_CHANGE_LOCK_METHOD_REQUEST, null);

Ответ 3

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

Ответ 4

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

Ответ 5

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

Хорошо, мое тестовое приложение подписано с ключом платформы и системным приложением. Я думаю, что это будет необходимо.

Ответ 6

Я получил в корневом планшете,

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

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 = '1' WHERE name = 'lockscreen.disabled'

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