web-dev-qa-db-ja.com

プログラムでロック画面を「なし」に設定しますか?

ロック画面を無効にし、ロック画面の種類を「なし」に設定する必要があります。私のデバイスはルート化されています(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');

を試す

マシンを再起動しましたが、それでも運がありません。

_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);
_

他に試すことができるものはありますか?

注意してくださいアプリケーションの実行中にのみキーガードを無効にしたくない

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'"

それは私の根付いたネクサス4で動作します。

14
superb

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

4
exilit

@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ファイル自体が再構築されました。

私はサムスンギャラクシーS4で TWRPリカバリ を使用しています。

2
jmatocha

この使用を宣言する必要があります-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を呼び出すことを提案しました。

2
Solution

使用する 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
1
JerryGoyal

探求したい 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で変更されていることに気づきました。

0
Yeung

私はルートタブレットで達成しました、

以下は私の完全な手順です

adbプッシュsqlite3/sdcard/sqlite3

adbシェル

su

mount -o remount、rw/system

cp/sdcard/sqlite3/system/xbin/sqlite3

chmod 755/system/xbin/sqlite3

mount -o remount、ro/system

adbシェルsqlite3/data/system/locksettings.db

UPDATEロック設定SET値= '1' WHERE name = 'lockscreen.disabled'

ファイルは http://www.digitechhub.com/sqlite からダウンロードできます。

0
Satheesh