我有一个带指纹身份验证的应用。在Android 8发布之前,它一直运行良好。所以问题是,当我注册新指纹时,没有KeyPermanentlyInvalidatedException
。所以它只发生在Android 8上,较低的API就可以了,我可以检查这个异常是否添加了新的指纹。我如何检查Android 8中的新指纹?
Google示例App - FingerprintDialog - 也有同样的问题。它没有看到注册新指纹的变化。
打开谷歌问题:
https://issuetracker.google.com/issues/65578763
答案 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();
}
}
有一个公共方法getFingerId(),但是我们无法调用它,因为它具有“ @UnsupportedAppUsage”。
所以您需要使用反射来调用该方法。在获得指纹ID列表之后,您可以对其进行加密并存储在sharedPreference中。
手指ID是设置中存储的指纹的ID
获取所有手指ID后,您可以确定用户是否添加/删除了指纹。
无需依靠KeyPermanentlyInvalidatedException。它不会在Android 8.0中抛出
祝你好运!!! ...
不相信Google做得这么差