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

Fondo

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

  • Cuando el usuario inicia la aplicación, comprueba si el usuario tiene un PIN registrado en su dispositivo.
  • Si el usuario tiene un PIN registrado, la aplicación debe mostrar el botón "Continuar con PIN".
  • Cuando el usuario presione el botón "Continuar con PIN", el diálogo de PIN estándar del sistema debe aparecer. Introduzca aquí la descripción de la imagen
  • El usuario ingresa su PIN y presiona el botón "Continuar".
  • Después de que el sistema debe comprobar si el PIN introducido es correcto o no y continuar trabajando.

Búsquedas

He hecho algunas búsquedas y he encontrado algunos artículos sobre stackoverflow y otras fuentes de internet que dicen " No hay manera de desarrollar un nuevo mecanismo de desbloqueo personalizado en un teléfono no arraigado " o " Me sorprendería si pudiera, porque entonces usted Sería probablemente capaz de robar el código PIN, y no creo que nadie querría que .

También he visto algunos videos tutoriales como Tutorial: Android Internals – Construir una ROM personalizada, Pt. 1 of 2 and Tutorial: Android Internals – Construyendo una ROM personalizada, Pt. 2 de 2 .

EDITADO

He hecho algunas búsquedas hoy y he encontrado una cosa muy interesante, creo que estoy en el camino correcto a la solución, y quiero compartir mis ideas con usted. Así que buscando en las fuentes de Android encontré un archivo interesante ChooseLockPassword.java ( package \ apps \ Settings \ src \ com \ android \ settings ) y LockPatternUtils.java (frameworks \ base \ core \ java \ com \ android \ internal \ ) Ahora estoy interesado en:

Pregunta

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


Decisión

Así que creo que la única manera de obtener acceso al sistema de diálogo de PIN del sistema Android es la raíz del teléfono hacer algunos cambios en los archivos del sistema y el uso del sistema PIN dialod


Pregunta

  1. ¿Puede alguien proporcionarme enlaces útiles acerca de cómo obtener acceso al diálogo del PIN del sistema en el teléfono enraizado.
  2. ¿Estoy en un camino correcto y puedo resolver mi problema de esta manera?
  3. Si alguien encontró tal problema por favor ayúdame a resolver.

¿Alguna solución?

Bueno, he resuelto este problema y ahora quiero compartir mi solución con usted.

Al principio como le dije que tengo fuentes de Android, así que he hecho 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 " ConfirmLockPattern ", " ConfirmLockPassword " y " ChooseLockPattern " actividades de mi propia aplicación. Después de compilar código fuente android y lanzar system.img en mi emulador.

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

 /** * 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() */ 

Aquí hay algunas consideraciones con respecto a su pregunta.

  1. Bucear profundamente en el código de Android no es muy buena idea en este caso en particular, ya que la verificación del código PIN es un importante punto de seguridad y su mecanismo debe estar oculto y bien protegido para evitar cualquier intención maliciosa.

  2. Por lo tanto, las acciones que desea realizar (preguntar PIN y luego comprobarlo contra PIN real) están prohibidas y se vería como una intrusión. Por lo tanto, no debe tratar de obtener un acceso al almacenamiento de contraseñas de usuario.

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

  4. La modificación de la ROM es, obviamente, de callejón sin salida – nadie parpadeará el teléfono para instalar una aplicación. Requerir teléfono enraizado es un poco mejor, hay aplicaciones que no pueden ejecutarse en teléfono no enraizado, pero todavía nos reenvía al punto # 2 (intrusión).

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

Por lo tanto, de acuerdo con todos los mencionados, te sugiero que pienses en diferentes métodos de verificación para tu aplicación.

  • Mapas de calle abierta (osmdroid) muestra los azulejos grises no mapa en PC
  • FontMetrics no es correcto cuando se ejecuta en el dispositivo Android. Simulador bien
  • ListView: ¿Cómo permanecer resaltado / seleccionado después de pulsar el botón Atrás?
  • ¿Cómo quitar sólo los espacios finales de una cadena en Java y mantener los espacios principales?
  • Android.view.WindowManager $ BadTokenException: No se puede agregar window-token null no es válido
  • Extras de Android SDK Manager
  • Error de Android Studio FloatingActionButton
  • ¿Excepción java.lang.outofmemoryerror?
  • StackOverflowError al intentar inflar un diseño personalizado para un AlertDialog dentro de un DialogFragment
  • La vinculación de datos de Android pasa los argumentos al método onClick
  • Recortar mapa de bits sin leer todo el mapa de bits primero
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.