为什么`hasEnrolledFingerprints`给出错误,它只需要我的片段中的权限,而不是Google的示例中的活动?

use*_*716 14 android android-fragments android-6.0-marshmallow android-fingerprint-api

我正在尝试在我的应用程序中实现Google的指纹API(特别是在我的片段中).谷歌给了一个例子,但它是一个活动内部实现这里.

我的具体问题是下面的代码检查是否已经注册了指纹,它给了我一个错误(截图如下):

问题 - >我需要做些什么改变才能让它在我的片段中工作(而不是谷歌这样的活动)?

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;
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

maw*_*ker 3

Android 6.0 必须在运行时“请求”许可。https://developer.android.com/training/permissions/requesting.html

危险权限可能会让应用程序访问用户的机密数据。如果您的应用程序在其清单中列出了普通权限,系统会自动授予该权限。如果您列出了危险权限,则用户必须明确批准您的应用程序。

即使您<uses-permission android:name="android.permission.USE_FINGERPRINT"/>的清单中有,我的理解是您必须请求许可。所以看起来错误是因为您的应用程序没有运行时权限来使用指纹管理器。

(只有 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");
 }
Run Code Online (Sandbox Code Playgroud)

(或类似的东西)就像https://developer.android.com/training/permissions/requesting.html中的示例