Возникли проблемы при получении намерений ACTION_PASSWORD_SUCCEEDED и ACTION_PASSWORD_FAILED - PullRequest
5 голосов
/ 09 ноября 2011

Я использую API администрирования Android и имею DeviceAdminReceiver, и переопределяю следующие функции:

@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=======================");        
}

При включенном, Отключенном, и PW изменили работу, однако пароль не удалось и успешно не сделали.Странно, они время от времени работают случайным образом, а затем перестают работать.Что-то не так с моим кодом, или это может быть проблема с API?

Приемник в 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>

FIXED

Обнаруженопроблема, кажется, это не было задокументировано.Я установил минимальную длину пароля с помощью dpm.setPasswordMinimumLength ().Операция ввода пароля не вызывает намерение PASSWORD_FAILED, если введенный пароль меньше минимальной длины.Также PASSWORD_SUCCEEDED срабатывает только в том случае, если перед успешным был введен неверный пароль (сработал PASSWORD_FAILED).Таким образом, два удачных пароля подряд не приведут ко второму намерению.

Ответы [ 2 ]

0 голосов
/ 20 июня 2017

Очень поздний ответ, но у меня возникла та же проблема, и ваше исправление "Исправлено" помогло мне понять, почему.

Как вы говорите, это не очень хорошо задокументировано, поэтому может быть весьма обманчивым. Документация предполагает, что любой сбой пароля приведет к вызову onPasswordFailed.

ACTION_PASSWORD_FAILED

Действие, отправленное администратору устройства, когда пользователь ввел неправильный пароль для вызова устройства или профиля. На этом этапе вы можете проверить количество неудачных попыток ввода пароля с помощью DevicePolicyManager.getCurrentFailedPasswordAttempts (). Обычно вы будете обрабатывать это в onPasswordFailed (Context, Intent, UserHandle).

Однако это не так. onPasswordFailed, по-видимому, вызывается только тогда, когда пароль / PIN / шаблон соответствует политике по умолчанию . Это отличается от вашей минимальной длины пароля.

Хотя я не могу найти какую-либо документацию с указанием политик по умолчанию, она выглядит как 4 цифры (PIN), 4 символа (пароль) или 4 точки (шаблон). Все, что меньше этих, не вызовет вызов.

Например, установите минимальную длину 6 и установите пароль 123ABC. Теперь попробуйте войти, используя следующее: -

  • 123 - onPasswordFailed не вызывается
  • 123A - onPasswordFailed называется

Хороший маленький проект тестера здесь Вы можете попробовать это с помощью.

Даже если вы, вероятно, хорошо и по-настоящему ушли от этой проблемы, кто-то другой может получить некоторую ясность.

Приветствие.

0 голосов
/ 09 мая 2016

Вы можете использовать android.intent.action.USER_PRESENT. Это намерение будет срабатывать всякий раз, когда пользователь разблокирует устройство. Вы можете зарегистрировать приемник вещания, который будет захватывать android.intent.action.USER_PRESENT для обнаружения событий разблокировки устройства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...