假设我有一个使用指纹验证用户的应用程序。在Android 5上,我使用三星Spass库仅用于三星设备。在Android M版本中,我添加了对许多设备的支持。首先,我检查我是否是Android M,然后如果我有一个管理器实例,如果我有硬件并且我已经注册了指纹:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
FingerprintManager manager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
if (manager != null) {
logger.info("Android native fingerprint manager exists");
if (manager.isHardwareDetected()) {
logger.info("Android native fingerprint manager detected hardware");
if (manager.hasEnrolledFingerprints()) {
logger.info("Android native fingerprint manager has enrolled fingerprints");
}
}
return new AndroidFingerprintHelper(context);
}
}
如果我在这里失败,我会回过头来检查Android是否是三星并且安装了Spass库。现在的问题是:如果用户在三星上使用Spass并使用Lollipop并注册了指纹。之后,他升级到Android M 而没有注册新指纹。 manager.hasEnrolledFingerprints()
会返回true吗?换句话说,三星Spass库是否与Android OS共享其数据?感谢。
答案 0 :(得分:1)
经过大量研究和测试后我发现:
在具有Android M的三星FingerPrintManager
上永远不会null
,但如果指纹是使用Spass Library(Samsung Native SDK)注册的,则尝试呼叫manager.isHardwareDetected()
将对Native Android FingerPrint Manager返回false。
答案 1 :(得分:0)
如果三星设备支持Android本机生物特征库,则使用它,否则请使用三星自己的Spass库。没有这个,我在使用Android Pie的S9 +时会遇到问题。这解决了问题。
if (Build.BRAND.equals("samsung")) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
FingerprintManager fingerprintManager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
if (fingerprintManager != null && fingerprintManager.isHardwareDetected()) {
return new FingerprintHelperNative(context);
}
}
Log.d(TAG, "Using Samsung fingerprint library. ");
return new FingerprintHelperSamsung(context);
} else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) {
return new FingerprintHelperNative(context);
} else return null;