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?
- En caché JSON de webservice en android - patrón?
- Cómo utilizar la opción --core-library en eclipse / Android
- Convertir archivo .Java a archivo .Smali
- ¿Cómo traducir código OpenCV-C ++, que contiene punteros, a JAVA?
- Convertir el valor de color hexadecimal (#ffffff) en valor entero
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.
- Eliminar / ocultar la búsquedaVer solo una actividad
- Gson deserializando objetos anidados con InstanceCreator
- Parse + Robolectric causando java.lang.VerifyError: Tipo incorrecto en pila de operandos
- IText crear un documento con tamaños de página desiguales
- ¿Por qué el AsyncTask de mi servicio bloquea AsyncTasks de la actividad principal?
- Android: ¿Cómo obtener el color de fondo de Actividad en Java?
- Establecer windowTranslucentStatus = true cuando android lollipop o superior
- No se puede importar android.support.design.widget.NavigationView
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.