Приемник устройства администратора не работает в нескольких версиях - PullRequest
3 голосов
/ 09 марта 2019

Я работаю над приложением безопасности, которое защищает устройство от посторонних.

В моем приложении есть функция, которая должна захватывать изображение с фронтальной камеры, если пользователь пытается разблокировать устройство с неправильным PIN / Pattern / Password.

У меня есть что-то вроде этого.

public class MyAdminReceiver extends DeviceAdminReceiver {

    @Override
    public void onPasswordFailed(Context context, Intent intent, UserHandle user) {


        Log.d("MyTag", "onPasswordFailed called");
        //Code for starting a service for image capture goes here
        .
        .
        .
    }
    ....
    ....
}

Почти во всех версиях изображение получается правильно, и приложение работает нормально.

Проблема: в некоторых устройствах функция onPasswordFailed не работает. Админ устройства активирован правильно. Я попытался отключить его снова и снова активировать. Я попытался перезагрузить устройство. Но ничего не сработало. Я вижу этот журнал в моей трассировке стека.

03-09 12:04:48.078 18491-18491/com.my.pkgname D/ActivityThread: BDC-Calling onReceive: intent=Intent { act=android.app.action.ACTION_PASSWORD_FAILED flg=0x10 cmp=com.my.pkgname/.receivers.MyAdminReceiver }, receiver=com.my.pkgname.receivers.MyAdminReceiver@30c2044b
03-09 12:04:48.079 18491-18491/com.my.pkgname D/ActivityThread: BDC-RECEIVER handled : 0 / ReceiverData{intent=Intent { act=android.app.action.ACTION_PASSWORD_FAILED flg=0x10 cmp=com.my.pkgname/.receivers.MyAdminReceiver } packageName=com.my.pkgname resultCode=-1 resultData=null resultExtras=null}

Эта проблема до сих пор видна во всех устройствах, которые я видел в Android 6.0 (версия Marshmallow) и Android 7.1.1 (его устройство Motorola, если это помогает).

Я уже проверил ниже вопросы:

Они не относятся к моему файлу admin.xml, и декларация Manifest в порядке, и она работает на всех других устройствах с версией Android 7, 8, 9.

И я проверил, используя шаблон, действительный PIN-код которого превышает минимальную длину. Я вообще не устанавливал другие ограничения пароля.

Тем не менее, я показываю часть манифеста admin.xml для проверки.

Манифест декларации:

....
<application>
    ....
    <receiver
        android:name=".receivers.MyAdminReceiver"
        android:exported="true"
        android:enabled="true"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
        <meta-data
            android:name="android.app.device_admin"
            android:resource="@xml/admin" />

        <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
            <action android:name="android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED" />
        </intent-filter>
    </receiver>
    ....
</application>

Файл admin.xml:

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <watch-login />
    </uses-policies>
</device-admin>

Может кто-нибудь помочь с этим вопросом?

Дайте мне знать, если требуется какое-либо специальное разрешение / или обязательная настройка.

P.S .: Я тестировал с некоторыми изменениями в коде. Администратор того же устройства может выполнять функцию lockNow () правильно, когда я добавил необходимую политику в admin.xml. Таким образом, администратор устройства настроен правильно. Так в чем же проблема, которую onPasswordFailed нельзя назвать?

Я также попытался добавить фильтр намерений для ACTION_PASSWORD_FAILED в манифесте. Без разницы.

<intent-filter>
    <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    <action android:name="android.app.action.ACTION_PASSWORD_FAILED" />
    <action android:name="android.app.action.ACTION_PASSWORD_SUCCEEDED"/>
</intent-filter>

1 Ответ

3 голосов
/ 11 марта 2019

void onPasswordFailed(Context context, Intent intent, UserHandle user) работает только с Oreo и выше.

Для обратной совместимости вам также необходимо переопределить onPasswordFailed(Context context, Intent intent). Это заставит ваш код работать на Nougat и ниже.

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