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

Why is `hasEnrolledFingerprints` giving error that it requires a permission only in my Fragment but not in the Activity in Google's Example?

我正在尝试在我的应用程序中(特别是在我的片段中)实现 Google 的指纹 API。 Google 给出了一个示例,但它是在 Activity here.

中实现的

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

问题 --> 我需要做哪些更改才能使其在我的 Fragment 中工作(与 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;
    }

Android 6.0 必须 'ask' 在 运行 时获得许可。 https://developer.android.com/training/permissions/requesting.html

Dangerous permissions can give the app access to the user's confidential data. If your app lists a normal permission in its manifest, the system grants the permission automatically. If you list a dangerous permission, the user has to explicitly give approval to your app.

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

(只有 90% 的把握,因为我现在坚持使用 5.0,抱歉)


更新:http://developer.android.com/reference/android/Manifest.permission.html#USE_FINGERPRINT

public static final String USE_FINGERPRINT ---------- Added in API level 23

Allows an app to use fingerprint hardware.

Protection level: normal

看来您在 运行 时不需要此权限。

1) 您的清单中是否有权限?

2) 您应该将以下代码放入您的代码中,以检查是否出于某种原因 revoked/not 授予了权限。

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

中的例子