Problemas al recibir ACTION_PASSWORD_SUCCEEDED y ACTION_PASSWORD_FAILED intents

Estoy usando la API de administración de Android y tengo un DeviceAdminReceiver, y reemplazo las siguientes funciones:

@Override public void onEnabled(Context context, Intent intent) { System.out.println("Admin On======================"); } @Override public void onDisabled(Context context, Intent intent) { System.out.println("Admin Off======================"); } @Override public void onPasswordFailed(Context context, Intent intent) { System.out.println("PW Bad============================"); } @Override public void onPasswordSucceeded(Context context, Intent intent) { System.out.println("PW Good==========================="); } @Override public void onPasswordChanged(Context context, Intent intent) { System.out.println("Changed PW======================="); } 

Activado, Desactivado y PW cambiado de trabajo, sin embargo, la contraseña falló y tuvo éxito no. Extrañamente, trabajan aleatoriamente de vez en cuando y después dejan de trabajar. ¿Hay algún problema con mi código, o podría ser un problema de API?

El receptor en AndroidMaifest

 <receiver android:name="AdminReciever" android:label="Administration" android:permission="android.permission.BIND_DEVICE_ADMIN" android:enabled="true"> <meta-data android:name="android.app.device_admin" android:resource="@xml/adminpolicies" /> <intent-filter> <action android:name="android.app.action.ACTION_PASSWORD_SUCCEEDED"/> <action android:name="android.app.action.ACTION_PASSWORD_FAILED"></action> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"></action> <action android:name="android.app.action.ACTION_PASSWORD_CHANGED"></action> </intent-filter> </receiver> 

FIJO

Encontrado el problema, parece que esto no fue documentado. Había establecido una longitud mínima de la contraseña con dpm.setPasswordMinimumLength (). La actividad de introducción de contraseña no desencadena una intención PASSWORD_FAILED si la contraseña introducida es menor que la longitud mínima. También PASSWORD_SUCCEEDED sólo se activa si se ha introducido una contraseña incorrecta (PASSWORD_FAILED activada) antes de que se haya ejecutado correctamente. Así que dos contraseñas de éxito en una fila no disparará la segunda intención.

Puede utilizar el archivo android.intent.action.USER_PRESENT. Esta intención se disparará siempre que el usuario desbloquee el dispositivo. Puede registrar un receptor de difusión que capture el android.intent.action.USER_PRESENT para detectar los eventos de desbloqueo del dispositivo.

Muy tarde respuesta aquí, pero yo estaba teniendo el mismo problema y su 'corregido' edición me ayudó a resolver por qué.

Como usted dice, esto no está muy bien documentado en absoluto, así que puede ser muy engañoso. La documentación sugiere que cualquier error de contraseña provocará que se llame onPasswordFailed.

ACTION_PASSWORD_FAILED

Acción enviada a un administrador de dispositivo cuando el usuario ha introducido una contraseña de desafío de dispositivo o perfil incorrecta. Puede comprobar en este punto el número de intentos fallidos de contraseña que ha habido con DevicePolicyManager.getCurrentFailedPasswordAttempts (). En general, se ocupará de esto en onPasswordFailed (Context, Intent, UserHandle).

Sin embargo, eso no es cierto. OnPasswordFailed sólo parece que se llama cuando la contraseña / PIN / patrón satisface la directiva predeterminada . Esto es diferente de su longitud mínima de la contraseña.

Aunque no puedo encontrar ninguna documentación que indique las políticas predeterminadas, parece que tiene 4 números (PIN), 4 caracteres (Contraseña) o 4 puntos (Patrón). Cualquier cosa menos que esto no activará la llamada.

Por ejemplo, establezca la longitud mínima en 6 y establezca su contraseña en 123ABC. Ahora trate de iniciar sesión con lo siguiente: –

  • 123 – onPasswordFailed no se llama
  • 123A – onPasswordFailed se llama

Un pequeño proyecto de prueba aquí puede probar esto con.

A pesar de que probablemente ya se haya mudado de este tema, otra persona puede obtener algo de claridad.

Aclamaciones.

  • Confundido acerca de la sincronización de varias tablas con el adaptador de sincronización y el proveedor de contenido
  • No puede llamar a String.isEmpty () en android
  • ¿Subir un archivo a un servidor FTP desde un teléfono Android?
  • La vista personalizada de Android solo recibe onDraw una vez
  • Biblioteca de Android AAR dependiendo de otra biblioteca
  • Configuración del paquete de soporte de Android v7 para eclipse - GridLayout
  • Tecnología de la parte posterior del androide - lengua (Java, Python) y IDE (CoderBuddy, exo Cloud, Cloud 9)
  • Api de Android de Youtube muestra un error
  • Subida de imagen amazon s3 android SDK 2.0
  • ¿Por qué mi actividad de Android permanece vacía después de adquirir permisos y agregar datos de lista a él?
  • Reutilizar código al usar pantallas en Libgdx
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.