Android デバイスでは、パターン、PIN、パスワードの 3 種類のロックを設定できます。
私のアプリケーションでは、プログラムで PIN を変更/リセットしたいと考えています。
そのデバイスの新しい PIN として設定される 4 桁の数字をユーザーから受け取ります。
この PIN をリセットすることは可能ですか、それとも Android のセキュリティ ポリシーに違反していますか?
ありがとうございました。
Android デバイスでは、パターン、PIN、パスワードの 3 種類のロックを設定できます。
私のアプリケーションでは、プログラムで PIN を変更/リセットしたいと考えています。
そのデバイスの新しい PIN として設定される 4 桁の数字をユーザーから受け取ります。
この PIN をリセットすることは可能ですか、それとも Android のセキュリティ ポリシーに違反していますか?
ありがとうございました。
Device Admin APIを使用して実行できます。Android では、パスワードの独自のロジックを作成する機能が提供されます (さらに..)。パスワード ポリシーの実装方法についてお読みください。
注: サンプル コードは で入手できます<sdk>/samples/android-<version>/
。番号は<version>
、プラットフォームの API レベルに対応しています。
リフレクションを使用してそれを行う最良の方法.リフレクションを使用すると、デバイスのパスワードをなし、スワイプ、ピン、パスワードに設定できます。管理者権限を持っていることを確認してください。このコードは、デバイスのパスワードをスワイプに変更します。resetpassword メソッドのピンには、"" 空の文字列の代わりに何らかの値を指定します。デバイス ポリシー マネージャーで何もしないでください。はい、アプリがシステムアプリであること、つまりシステムが署名していることを確認してください
try
{
try{
Class lockPatternUtilsCls = Class.forName("com.android.internal.widget.LockPatternUtils");
Constructor lockPatternUtilsConstructor =
lockPatternUtilsCls.getConstructor(new Class[]{Context.class});
lockPatternUtilsConstructor.setAccessible(true);
Object lockPatternUtils = lockPatternUtilsConstructor.newInstance(ChangeDeviceLockMode.this);
Method clearLockMethod = lockPatternUtils.getClass().getMethod("clearLock", boolean.class);
clearLockMethod.setAccessible(true);
clearLockMethod.invoke(lockPatternUtils, true);
Method setLockScreenDisabledMethod = lockPatternUtils.getClass().getMethod("setLockScreenDisabled", boolean.class);
setLockScreenDisabledMethod.setAccessible(true);
setLockScreenDisabledMethod.invoke(lockPatternUtils, false);
}catch(Exception e){
System.err.println("An InvocationTargetException was caught!");
Throwable cause = e.getCause();
}
devicePolicyManager.setPasswordQuality(demoDeviceAdmin, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
devicePolicyManager.setPasswordMinimumLength(demoDeviceAdmin, 0);
boolean result = devicePolicyManager.resetPassword("", DevicePolicyManager.RESET_PASSWORD_REQUIRE_ENTRY);
}
catch(Exception ex)
{
ex.printStackTrace();
}