Я создаю приложение безопасности, и мне нужно знать, дает ли пользователь неправильный пароль. Предположим, что телефон пользователя заблокирован системой блокировки шаблона, и, к сожалению, пользователь забыл пароль шаблона. Когда пользователь вводит неправильный шаблон 5 раз, будет наложен штраф на 30 секунд. Мне нужно поймать это пенальти. В моем приложении я должен выполнить некоторую задачу (для безопасности пользователя), когда это даже произойдет. Помогите мне, пожалуйста,
Обнаружение неправильного пароля на экране блокировки пользователем в Android
Ответы (3)
Вы можете настроить DeviceAdminReceiver
, который будет уведомляться о неудачных попытках ввода пароля, а также об успешной попытке ввода пароля, произошедшей после неудачной попытки. Это описано в документации API администрирования устройств Android.
Обратите внимание, что пользователь должен будет разрешить вашему приложению выступать в качестве администратора устройства через приложение «Настройки», прежде чем вы получите эти события.
Этот пример проекта демонстрирует прослушивание этих событий, а также настройку политика качества паролей. Ключевые части:
- реализация
DeviceAdminReceiver
- метаданные администратора устройства, указав, какие административные возможности нужны вашему приложению
- запись получателя в манифесте
- код в активность, чтобы определить, одобрено ли ваше приложение для работы в качестве администратора устройства, и, если нет, направить пользователя в нужное место в настройках, чтобы внести это изменение.
setPasswordQuality()
в onEnabled()
. Вы можете полностью удалить метод onEnabled()
в AdminReceiver
вместе с соответствующим действием в <intent-filter>
. Это не обязательно для получения событий пароля. Однако он не вводит новую систему настройки паролей.
- person CommonsWare; 05.04.2014
Я делаю то же самое в студии Android с уровнем API-22. но ничего не происходит. Показывает ошибку: Установка com.example.sourav.myfirstapp КОМАНДА ОБОЛОЧКИ УСТРОЙСТВА: pm install -r /data/local/tmp/com.example.sourav.myfirstapp pkg: /data/local/tmp/com.example.sourav. Сбой моего первого приложения [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]
Вот моя информация о моем проекте - основная деятельность приемника администратора -
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");
}
}
манифест-
<?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>
Первый шаг — предоставить вашему приложению привилегию
DEVICE_ADMIN
пользователем.Напишите свой собственный класс, который расширяет
DeviceAdminReceiver
. Для этого вам нужно импортироватьimport android.app.admin.DeviceAdminReceiver;
Переопределите методы в вашем случае примерно так:
@Override public void onPasswordFailed(Context context, Intent intent) { Log.d("Hello", "onPasswordFailed"); } @Override public void onPasswordSucceeded(Context context, Intent intent) { Log.d("Hello", "onPasswordSucceeded"); }