Android指纹API - 从三星Spass

时间:2016-08-09 15:46:51

标签: android samsung-mobile-sdk android-fingerprint-api

假设我有一个使用指纹验证用户的应用程序。在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共享其数据?感谢。

2 个答案:

答案 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;