Почему `hasEnrolledFingerprints` дает ошибку, что для этого требуется разрешение только в моем фрагменте, но не в примере "Активность в Google"?

Я пытаюсь реализовать API Fingerprint Google в своем приложении (в частности, в моем фрагменте). Google привел пример, но он реализован внутри Activity здесь.

Мой конкретный вопрос заключается в том, что код ниже, чтобы проверить, есть ли уже зарегистрированные отпечатки пальцев, он дает мне ошибку (снимок экрана ниже):

Вопрос → Какое изменение мне нужно сделать, чтобы он работал в моем фрагменте (в отличие от такого действия, как Google)?

if (!mFingerprintManager.hasEnrolledFingerprints()) {
        purchaseButton.setEnabled(false);
        // This happens when no fingerprints are registered.
        Toast.makeText(getActivity(),
                "Go to 'Settings -> Security -> Fingerprint' and register at least one fingerprint",
                Toast.LENGTH_LONG).show();
        return;
    }

введите описание изображения здесь

Ответы

Ответ 1

Android 6.0 должен "запрашивать" разрешение во время выполнения. https://developer.android.com/training/permissions/requesting.html

Опасные разрешения могут предоставить приложению доступ к конфиденциальных данных. Если ваше приложение отображает нормальное разрешение в своем манифест, система автоматически дает разрешение. Если вы перечислите опасное разрешение, пользователь должен явно дать разрешение на ваше приложение.

Даже если у вас есть <uses-permission android:name="android.permission.USE_FINGERPRINT"/> в вашем манифесте, я понимаю, что вы должны попросить разрешения. Таким образом, похоже, что ошибка связана с тем, что ваше приложение не имеет разрешения -run time-time для использования диспетчера отпечатков пальцев.

(только 90% уверены в этом, так как сейчас я придерживаюсь 5.0, извините)


Обновление: http://developer.android.com/reference/android/Manifest.permission.html#USE_FINGERPRINT

public static final String USE_FINGERPRINT ---------- Добавлен в уровень API 23

Позволяет приложению использовать отпечатки пальцев.

Уровень защиты: обычный

Итак, похоже, вам не нужно это разрешение во время выполнения.

1) У вас есть разрешение в манифесте?

2) Вы должны поместить в свой код следующий код, чтобы проверить, не отменено ли разрешение или не указано по какой-либо причине.

if (ContextCompat.checkSelfPermission(thisActivity,
            Manifest.permission.USE_FINGERPRINT) // this might need massaged to 'android.permission.USE_FINGERPRINT'
    != PackageManager.PERMISSION_GRANTED) {
 Log.d ("TEST", "You don't have permission");
 }

(или что-то близкое к этому), как пример из https://developer.android.com/training/permissions/requesting.html