如何检查是否添加了新手指?

时间:2017-09-12 17:40:44

标签: android fingerprint android-8.0-oreo

我有一个带指纹身份验证的应用。在Android 8发布之前,它一直运行良好。所以问题是,当我注册新指纹时,没有KeyPermanentlyInvalidatedException。所以它只发生在Android 8上,较低的API就可以了,我可以检查这个异常是否添加了新的指纹。我如何检查Android 8中的新指纹? Google示例App - FingerprintDialog - 也有同样的问题。它没有看到注册新指纹的变化。 打开谷歌问题: https://issuetracker.google.com/issues/65578763

1 个答案:

答案 0 :(得分:1)

我有个好消息。我终于破解了。

我可以用整数获取所有手指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);

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

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

请参考以下内容:https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/hardware/fingerprint/Fingerprint.java

有一个公共方法getFingerId(),但是我们无法调用它,因为它具有“ @UnsupportedAppUsage”。

所以您需要使用反射来调用该方法。在获得指纹ID列表之后,您可以对其进行加密并存储在sharedPreference中。

手指ID是设置中存储的指纹的ID

获取所有手指ID后,您可以确定用户是否添加/删除了指纹。

无需依靠KeyPermanentlyInvalidatedException。它不会在Android 8.0中抛出

祝你好运!!! ...

不相信Google做得这么差