Обнаружение неправильного пароля на экране блокировки пользователем в Android

Я создаю приложение безопасности, и мне нужно знать, дает ли пользователь неправильный пароль. Предположим, что телефон пользователя заблокирован системой блокировки шаблона, и, к сожалению, пользователь забыл пароль шаблона. Когда пользователь вводит неправильный шаблон 5 раз, будет наложен штраф на 30 секунд. Мне нужно поймать это пенальти. В моем приложении я должен выполнить некоторую задачу (для безопасности пользователя), когда это даже произойдет. Помогите мне, пожалуйста,


person user2166895    schedule 05.04.2014    source источник


Ответы (3)


Вы можете настроить DeviceAdminReceiver, который будет уведомляться о неудачных попытках ввода пароля, а также об успешной попытке ввода пароля, произошедшей после неудачной попытки. Это описано в документации API администрирования устройств Android.

Обратите внимание, что пользователь должен будет разрешить вашему приложению выступать в качестве администратора устройства через приложение «Настройки», прежде чем вы получите эти события.

Этот пример проекта демонстрирует прослушивание этих событий, а также настройку политика качества паролей. Ключевые части:

person CommonsWare    schedule 05.04.2014
comment
Я видел код, этот код вводит новую систему настройки паролей, мне не нужна вся система, мне просто нужно знать, что пользователь ввел неправильный пароль в своей системе блокировки по умолчанию. Можете ли вы помочь в этом. В любом случае спасибо за ответ - person user2166895; 05.04.2014
comment
@ user2166895: этот код вводит новую систему настройки паролей - нет, это не так. мне просто нужно знать, что пользователь ввел неправильный пароль в своей системе блокировки по умолчанию. Можете ли вы помочь в этом - это описано в моем ответе. - person CommonsWare; 05.04.2014
comment
Но код отключает систему блокировки шаблона, слайда или штифта, я этого не хочу. - person user2166895; 05.04.2014
comment
@ user2166895: Но код отключает систему блокировки шаблона, слайда или штифта - я предполагаю, что вы имеете в виду вызов setPasswordQuality() в onEnabled(). Вы можете полностью удалить метод onEnabled() в AdminReceiver вместе с соответствующим действием в <intent-filter>. Это не обязательно для получения событий пароля. Однако он не вводит новую систему настройки паролей. - person CommonsWare; 05.04.2014
comment
Спасибо, я понял. Но могу ли я получить количество попыток доступа пользователя? никогда не взломает это устройство!, Toast.LENGTH_LONG) .show(); Строковый тег=тег; Log.d(tag, ****************Это сообщение от Error**************); }` Еще раз спасибо. - person user2166895; 05.04.2014
comment
@ user2166895: Но могу ли я получить количество попыток доступа пользователя. Я имею в виду количество ошибок - вам придется отслеживать это самостоятельно. - person CommonsWare; 05.04.2014
comment
Здесь вы используете minSdkVersion=11, можно ли чуть меньше? - person user2166895; 06.04.2014
comment
@ user2166895: API-интерфейсы администратора устройства были добавлены в API-уровень 8, и тогда существовала ошибка пароля и успешные действия, поэтому теоретически ваш конкретный бит должен работать обратно на API-уровень 8. Обратите внимание, что другие аспекты API-интерфейсов администрирования устройства были добавлены позже. , поэтому ознакомьтесь с документацией, чтобы узнать, что доступно, а что нет на желаемом уровне API. - person CommonsWare; 06.04.2014
comment
Спасибо . Он работает на уровне API 8. В любом случае я получил то, что хотел. - person user2166895; 06.04.2014
comment
DevicePolicyManager policyManager = (DevicePolicyManager) ctx.getSystemService(Context.DEVICE_POLICY_SERVICE); возвращает ноль, в API 21.... есть идеи? - person Saty; 01.06.2015
comment
code.google.com/p/android-developer- превью/проблемы/ отчасти связанные с этой проблемой @CommonsWare - person Saty; 04.06.2015
comment
Привет, я использовал твой код, но не могу удалить приложение с телефона. Я новичок и не вижу кода для блокировки удаления. Есть ли какой-нибудь код для отключения, чтобы удалить приложение с телефона? Как я могу удалить его? - person ffttyy; 07.09.2015

Я делаю то же самое в студии 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>
person guddu kumar sharma    schedule 17.10.2015

  1. Первый шаг — предоставить вашему приложению привилегию DEVICE_ADMIN пользователем.

  2. Напишите свой собственный класс, который расширяет DeviceAdminReceiver. Для этого вам нужно импортировать import android.app.admin.DeviceAdminReceiver;

  3. Переопределите методы в вашем случае примерно так:

    @Override
    public void onPasswordFailed(Context context, Intent intent) {
        Log.d("Hello", "onPasswordFailed");
    }
    @Override
    public void onPasswordSucceeded(Context context, Intent intent) {
        Log.d("Hello", "onPasswordSucceeded");
    }
    
person Saty    schedule 05.06.2015