14

我正在尝试在我的应用程序中实现 Google 的指纹 API(特别是在我的 Fragment 中)。谷歌给出了一个例子,但它是在 Activity 中实现

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

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

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;
    }

在此处输入图像描述

4

1 回答 1

3

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

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

即使<uses-permission android:name="android.permission.USE_FINGERPRINT"/>您的清单中有,我的理解是您必须请求许可。所以看起来错误是因为您的应用程序没有 -run 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的例子

于 2015-12-29T01:47:35.227 回答