Solución:
Puede configurar un DeviceAdminReceiver
que será notificado sobre los intentos fallidos de contraseña, así como sobre un intento de contraseña exitoso que ocurrió después de un intento fallido. Esto se trata en la documentación de las API de administración de dispositivos de Android.
Tenga en cuenta que el usuario deberá aceptar permitir que su aplicación funcione como administrador del dispositivo, a través de la aplicación Configuración, antes de que reciba estos eventos.
Este proyecto de muestra demuestra escuchar esos eventos, además de configurar una política de calidad de contraseña. Las piezas clave son:
- los
DeviceAdminReceiver
implementación - los metadatos del administrador del dispositivo, indicando qué capacidades administrativas desea su aplicación
- la entrada del receptor en el manifiesto
- código en la actividad para detectar si su aplicación está aprobada para funcionar como administrador del dispositivo y, de lo contrario, lleve al usuario al lugar en Configuración para realizar ese cambio
Estoy haciendo lo mismo en Android Studio con API level-22. pero no pasa nada. Se muestra un error: “Instalando com.example.sourav.myfirstapp DEVICE SHELL COMMAND: pm install -r” /data/local/tmp/com.example.sourav.myfirstapp “pkg: /data/local/tmp/com.example .sourav.myfirstapp Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]”
Aquí está mi detalle de mi proyecto – Actividad principal del receptor de administración-
public class AdminReceiver extends DeviceAdminReceiver {
@Override
public void onPasswordChanged(Context ctxt, Intent intent) {
DevicePolicyManager mgr=
(DevicePolicyManager)ctxt.getSystemService(Context.DEVICE_POLICY_SERVICE);
int msgId;
if (mgr.isActivePasswordSufficient()) {
msgId=R.string.compliant;
}
else msgId = R.string.not_compliant;
Toast.makeText(ctxt, msgId, Toast.LENGTH_LONG).show();
}
@Override
public void onPasswordFailed(Context ctxt, Intent intent) {
Toast.makeText(ctxt, "u will never break!", Toast.LENGTH_LONG)
.show();
String tag="tag";
Log.v(tag,"this massage from error" );
}
@Override
public void onPasswordSucceeded(Context ctxt, Intent intent) {
Toast.makeText(ctxt, "good u enterd", Toast.LENGTH_LONG)
.show();
String tag="tag";
Log.v(tag, "this massage from success");
}
}
manifiesto-
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sourav.myfirstapp" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<receiver
android:name="AdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
/>
<intent-filter>
<action android:name="android.app.action.ACTION_PASSWORD_FAILED"/>
<action android:name="android.app.action.ACTION_PASSWORD_SUCCEEDED"/>
</intent-filter>
</receiver>
</application>
</manifest>
Metadata-
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password/>
<watch-login/>
</uses-policies>