2017-01-11 10 views
1

私は「デバイスはPINまたはパターンで保護する」というアイコンを表示するAndroidアプリを持っています。 ユーザーは設定に行き、自分のデバイスのPINやパターンを有効にしてアプリに戻ります。 アイコンが表示されます。このイベントを聞いてアイコンを無効にするにはどうしたらいいですか?Android PINまたはパターンの変更リスナー

アイコンは、アプリを強制終了して再起動すると消えます。

答えて

3

このような問題のイベントリスナーはありません。あなたは何ができるか

では、次のコードを少し操作することによってそれを毎回アプリケーションonResume().

を確認することができます。

public class LockType 
{ 
    private final static String PASSWORD_TYPE_KEY = "lockscreen.password_type"; 

    /** 
    * This constant means that android using some unlock method not described here. 
    * Possible new methods would be added in the future releases. 
    */ 
    public final static int SOMETHING_ELSE = 0; 

    /** 
    * Android using "None" or "Slide" unlock method. It seems there is no way to determine which method exactly used. 
    * In both cases you'll get "PASSWORD_QUALITY_SOMETHING" and "LOCK_PATTERN_ENABLED" == 0. 
    */ 
    public final static int NONE_OR_SLIDER = 1; 

    /** 
    * Android using "Face Unlock" with "Pattern" as additional unlock method. Android don't allow you to select 
    * "Face Unlock" without additional unlock method. 
    */ 
    public final static int FACE_WITH_PATTERN = 3; 

    /** 
    * Android using "Face Unlock" with "PIN" as additional unlock method. Android don't allow you to select 
    * "Face Unlock" without additional unlock method. 
    */ 
    public final static int FACE_WITH_PIN = 4; 

    /** 
    * Android using "Face Unlock" with some additional unlock method not described here. 
    * Possible new methods would be added in the future releases. Values from 5 to 8 reserved for this situation. 
    */ 
    public final static int FACE_WITH_SOMETHING_ELSE = 9; 

    /** 
    * Android using "Pattern" unlock method. 
    */ 
    public final static int PATTERN = 10; 

    /** 
    * Android using "PIN" unlock method. 
    */ 
    public final static int PIN = 11; 

    /** 
    * Android using "Password" unlock method with password containing only letters. 
    */ 
    public final static int PASSWORD_ALPHABETIC = 12; 

    /** 
    * Android using "Password" unlock method with password containing both letters and numbers. 
    */ 
    public final static int PASSWORD_ALPHANUMERIC = 13; 

    /** 
    * Returns current unlock method as integer value. You can see all possible values above 
    * @param contentResolver we need to pass ContentResolver to Settings.Secure.getLong(...) and 
    *      Settings.Secure.getInt(...) 
    * @return current unlock method as integer value 
    */ 
    public static int getCurrent(ContentResolver contentResolver) 
    { 
     long mode = android.provider.Settings.Secure.getLong(contentResolver, PASSWORD_TYPE_KEY, 
       DevicePolicyManager.PASSWORD_QUALITY_SOMETHING); 
     if (mode == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING) 
     { 
      if (android.provider.Settings.Secure.getInt(contentResolver, Settings.Secure.LOCK_PATTERN_ENABLED, 0) == 1) 
      { 
       return LockType.PATTERN; 
      } 
      else return LockType.NONE_OR_SLIDER; 
     } 
     else if (mode == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) 
     { 
      String dataDirPath = Environment.getDataDirectory().getAbsolutePath(); 
      if (nonEmptyFileExists(dataDirPath + "/system/gesture.key")) 
      { 
       return LockType.FACE_WITH_PATTERN; 
      } 
      else if (nonEmptyFileExists(dataDirPath + "/system/password.key")) 
      { 
       return LockType.FACE_WITH_PIN; 
      } 
      else return FACE_WITH_SOMETHING_ELSE; 
     } 
     else if (mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC) 
     { 
      return LockType.PASSWORD_ALPHANUMERIC; 
     } 
     else if (mode == DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC) 
     { 
      return LockType.PASSWORD_ALPHABETIC; 
     } 
     else if (mode == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) 
     { 
      return LockType.PIN; 
     } 
     else return LockType.SOMETHING_ELSE; 
    } 

    private static boolean nonEmptyFileExists(String filename) 
    { 
     File file = new File(filename); 
     return file.exists() && file.length() > 0; 
    } 
} 
+0

ありがとうございます...しかし、あなたのコードではどこでonResume()を使用しましたか? –

+0

私は私の友人はいませんが、あなたができることは、ロジックは私のコードでその問題を使用して優秀に説明されています。 –

+0

@AlexPierro onResumeアクティビティのライフサイクルメソッドです。 https://developer.android.com/guide/components/activities/activity-lifecycle.htmlにアクセスする前に、もう少し詳しく知っておくべきでしょう。それはない - ここhttps://developer.android.com/reference/android/content/ContentResolver.html – MatPag

0

ます。これは、変更をピンにリッスンこのクラスhttps://developer.android.com/reference/android/app/admin/DeviceAdminReceiver.html

を確認することができます。

は、説明との良好な答えはhereを見ることができます https://developer.android.com/guide/topics/admin/device-admin.html

実装の詳細については、このリンクを参照してください。

+0

パターンについても? –

+0

パターンが不明ですが、このクラスを使用してPINを変更することができます。 – Shruti

+0

デバイスの所有者またはポリシー所有者でなくてもこれを実行できますか?デバイス管理を実装するのは非常に重く、エンタープライズプロビジョニングアプリケーションの場合にのみ行う必要があります。 –