varios una studio sistema pin permisos pedir para multiples iniciar ingrese hacer dispositivo convertir contraseña como codigo cambiar aplicacion java android

java - una - Usar el diálogo del PIN del sistema en la aplicación de Android



pedir varios permisos android studio (3)

Fondo

Estoy tratando de escribir una aplicación que funcione como se describe a continuación.

  • Cuando el usuario inicie la aplicación, verifique si el usuario ha registrado un PIN en su dispositivo.
  • Si el usuario ha registrado un PIN, la aplicación debe mostrar el botón "Continuar con PIN".
  • Cuando el usuario presione el botón "Continuar con PIN", aparecerá el cuadro de diálogo PIN estándar del sistema.
  • El usuario ingresa su PIN y presiona el botón "Continuar".
  • Después, el sistema debe verificar si el PIN ingresado es correcto o no y continuar trabajando.

Búsquedas

Hice algunas búsquedas y encontré algunos artículos sobre Home y otras fuentes de Internet que dicen " No hay manera de desarrollar un nuevo mecanismo de desbloqueo personalizado en un teléfono no rooteado " o " Me sorprendería si pudiera, porque entonces probablemente sería capaz de robar el código pin, y creo que nadie querría eso ".

También he visto algunos videos tutoriales como Tutorial: Internos de Android - Construyendo una ROM personalizada, Pt. 1 de 2 y Tutorial: Internos de Android - Creación de una ROM personalizada, Pt. 2 de 2 .

Editado

Hice algunas búsquedas hoy y encontré algo muy interesante, creo que estoy en el camino correcto para la solución y quiero compartir mis ideas con ustedes. Entonces, buscando en las fuentes de Android, encontré un archivo interesante ChooseLockPassword.java ( packages / apps / Settings / src / com / android / settings ) y LockPatternUtils.java (* frameworks / base / core / java / com / android / internal / widget * ) ahora estoy interesado en:

Pregunta

¿Cómo puedo llamar a la función de clase LockPatternUtils desde mi código ? O ¿Por qué no puedo ver esa función en Eclipse?

Decisión

Así que creo que la única forma de acceder al cuadro de diálogo PIN del sistema Android es rootear el teléfono, hacer algunos cambios en los archivos del sistema y usar el dialod del PIN del sistema.

Pregunta

  1. ¿Puede alguien proporcionarme enlaces útiles sobre cómo acceder al cuadro de diálogo PIN del sistema en el teléfono rooteado?
  2. ¿Estoy en la forma correcta y puedo resolver mi problema de esta manera?
  3. Si alguien encuentra tal problema por favor ayúdame a resolverlo.

¿Alguna solución?


Aquí hay algunas consideraciones con respecto a su pregunta.

  1. Adentrarse profundamente en el código de Android no es una buena idea en este caso particular, ya que verificar el código PIN es un punto de seguridad importante y su mecanismo debe estar oculto y bien protegido para evitar intenciones maliciosas.

  2. Por lo tanto, las acciones que desea realizar (solicitar el PIN y luego verificarlo con el PIN real) están prohibidas y parecerían una intrusión. Por lo tanto, no debe intentar obtener acceso al almacenamiento de las contraseñas de los usuarios.

  3. Sería más correcto intentar iniciar la pantalla del PIN estándar a través de alguna Intent y pedirle que haga todo el trabajo por usted. Sin embargo, una breve investigación no me dio ningún resultado en esta dirección; Tal vez, encontrarás algo.

  4. Obviamente, la modificación de la ROM es un callejón sin salida: nadie actualizará el teléfono para instalar una aplicación. Requerir un teléfono rooteado es un poco mejor, hay aplicaciones que no se pueden ejecutar en un teléfono no rooteado, pero aún así nos remite al punto # 2 (intrusión).

  5. Los usuarios pueden desactivar la verificación de PIN y hay dispositivos sin SIM .

Entonces, de acuerdo con todo lo mencionado, te sugiero que pienses en un método de verificación diferente para tu aplicación.


Bien, he resuelto este problema y ahora quiero compartir mi solución con ustedes.

Al principio, como dije, tengo fuentes de Android, así que hice algunos cambios en las fuentes de Android para obtener acceso a los diálogos de PIN y Patrón. Y aquí están:

en ~ / AndroidSources / pakages / apps / Settings / AndroidManifest.xml he cambiado las siguientes líneas de código

<activity android:name="ConfirmLockPattern" android:exported="true"> // This line was added by me. </activity> <activity android:name="ConfirmLockPassword" android:exported="true" // This line was added by me. android:them="@android:style/Them.NoTitleBar"> </activity> <activity android:name="ChooseLockPattern" android:exported="true" // This line was added by me. android:label="@string/lockpattern_change_lock_pattern_label"> </activity>

Estas modificaciones me permiten llamar a las actividades " ConfirmLockPattern ", " ConfirmLockPassword " y " ChooseLockPattern " desde mi propia aplicación. Después de compilar los códigos fuente de Android y lanzar system.img en mi emulador.

En mi aplicación, tengo que escribir las siguientes funciones para llamar a las actividades " ConfirmLockPattern " o " ChooseLockPattern ":

/** * Show PIN/Password confirmation dialog. */ void ShowConfirmLockPINActivity() { CustomLog.i(TAG, "Show Confirm Lock PIN Activity"); Intent intent = new Intent(Intent.ACTION_RUN); intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.ConfirmLockPassword")); startActivityForResult(intent, mRequestCode); } /* ShowConfirmLockPINActivity() */ /** * Show set PIN/Password dialog. */ void ShowSetLockPINActivity() { CustomLog.i(TAG, "Show Set Lock PIN Activity"); Intent intent = new Intent(Intent.ACTION_RUN); intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.ChooseLockPassword")); startActivityForResult(intent, mRequestCode); } /* ShowSetLockPINActivity() */ /** * Show Pattern Confirmation dialog. */ void ShowSetLockPatternActivity() { CustomLog.i(TAG, "Show Set Lock Pattern Activity"); Intent intent = new Intent(Intent.ACTION_RUN); intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.ConfirmLockPattern")); startActivityForResult(intent, mRequestCode); } /* ShowSetLockPatternActivity() */


Desde el nivel 21 de API, KeyguardManager.createConfirmDeviceCredentialIntent se puede usar para autenticar al usuario actual con el pin de bloqueo del dispositivo.

Vea el ejemplo de uso .