【问题标题】:android8.0 cann't check fingerpring update,when I add a new fingerprint in my device当我在设备中添加新指纹时,android 8.0 无法检查指纹更新
【发布时间】:2017-11-20 11:13:16
【问题描述】:

https://github.com/googlesamples/android-FingerprintDialog/blob/master/Application/src/main/java/com/example/android/fingerprintdialog/MainActivity.java

请查看该代码(该代码是 google 的 android 指纹示例),我也这样做,但是当我添加一个新的指纹时,此方法返回 true,不返回 false。这个问题只能在android8.0中找到。

我想知道为什么。如果你知道,请帮助我。

【问题讨论】:

  • 请查看 MainActivity.java 中的 initCipher(Cipher cipher, String keyName) 方法
  • 您能在这里分享您的清单文件吗?
  • 请不要给你的代码链接,在你的帖子中包含它

标签: android


【解决方案1】:

请查看以下链接, https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.Builder.html#setUserAuthenticationRequired(boolean)

一旦安全锁,密钥将不可逆转地失效 屏幕被禁用(重新配置为无、滑动或其他模式 不验证用户)或当安全锁屏 强制重置(例如,由设备管理员)。此外,如果 密钥要求每次使用都进行用户身份验证 密钥,一旦有新的指纹,它也将不可逆地失效 登记或一旦不再登记指纹,除非 setInvalidatedByBiometricEnrollment(boolean) 用于允许有效性 入学后。尝试初始化加密操作 使用这样的键会抛出 KeyPermanentlyInvalidatedException。

【讨论】:

  • 嗨 Samir,1,在我的 AndroidManifest.xml 中,我设置了
  • 我也设置了 setUserAuthenticationRequired(ture)
  • 你检查过这个链接和我的回答了吗?
【解决方案2】:

我可以将所有手指 id 作为整数:

private void getFingerprintInfo(Context context) {
    try {
        FingerprintManager fingerprintManager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
        Method method = FingerprintManager.class.getDeclaredMethod("getEnrolledFingerprints");
        Object obj = method.invoke(fingerprintManager);

        System.out.println("fkie4. CDVBiometricAuthPlugin. obj is null? " + (obj == null));

        if (obj != null) {
            Class<?> clazz = Class.forName("android.hardware.fingerprint.Fingerprint");
            Method getFingerId = clazz.getDeclaredMethod("getFingerId");

            System.out.println("fkie4. CDVBiometricAuthPlugin. obj size: " + ((List) obj).size() + ", getFingerId is null? " + (getFingerId == null));

            for (int i = 0; i < ((List) obj).size(); i++)
            {
                Object item = ((List) obj).get(i);
                if(item != null)
                {
                    System.out.println("fkie4. fingerId: " + getFingerId.invoke(item));
                }
            }
        }
    } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | ClassNotFoundException e) {
        e.printStackTrace();
    }
}

refer to this

有一个公共方法getFingerId(),但是因为有@UnsupportedAppUsage所以我们不能调用,所以需要使用反射来调用方法。获得指纹 ID 列表后,您可以对其进行加密并将其存储在 SharedPreferences 中。

【讨论】:

    猜你喜欢
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 2018-11-09
    相关资源
    最近更新 更多