哪些三星设备不支持安卓原生指纹API?

12
我假设没有安卓棉花糖以前的操作系统支持指纹API。
我的问题是:
(a) 所有/任何发布于棉花糖的三星手机都支持Android指纹API吗?
(b) 任何升级至棉花糖的三星手机都支持Android指纹API吗?
我已经阅读了以下内容: 在使用三星S5上的Android 6.0指纹API时无法检测到指纹扫描仪 三星Note 4指纹未找到 对于三星Note 4,Android FingerPrint API isHardwareDetected返回false 不使用Android指纹SDK的指纹传感器版本高于6.0的设备 但没有明确的答案。此外,三星的网站提到所有三星设备都支持Pass SDK,但没有提到Android指纹API的支持。

是的,它支持。我几个月前曾尝试过使用它们。 - Akshay
我已经在S7 Marshmallow上尝试过了...你想在哪个设备上运行它? - Akshay
这是为我要发布的应用程序。我想知道它不适用于哪些设备,因为我的用户可能会使用稍旧的手机(不知道他们会有哪些)。因此,我希望确保最大的兼容性。如果手机数量很多,我将尝试确保支持过去的SDK和Android API。 - ColonD
如果有用户报告无法使用该功能,这将有助于故障排除,我可以知道它是否为错误。 - ColonD
你是只针对三星设备开发吗?如果是,请在http://developer.samsung.com的论坛上发布。 - Akshay
显示剩余2条评论
3个回答

3
从我的调查中,我发现以下信息。Pass API可以帮助那些在Android 6之前就已经拥有指纹API的三星设备,这些设备是2014年具有指纹识别功能的。可以在此处找到设备列表。 https://en.wikipedia.org/wiki/Samsung_Galaxy 主要设备包括:
  1. 三星Galaxy s5(及其变型mini、plus)
  2. 三星Galaxy Note 4(Note 4 edge)
即使将安卓系统升级到6版,它们也不支持标准的Google FingerPrint Api。

2

在理解下面评论中对我的回答的更明确要求后,这里是更新后的答案

Pass 是为三星设备提供指纹功能的SDK。您可以检查设备是否正在使用 Pass SDK。

以下是检查它的代码:

    FingerprintManager fingerprintManager = (FingerprintManager) getApplicationContext().getSystemService(Context.FINGERPRINT_SERVICE);
    boolean isFingerprintSupported = fingerprintManager != null && fingerprintManager.isHardwareDetected();

    if (!isFingerprintSupported && SsdkVendorCheck.isSamsungDevice()) { // for samsung devices which doesn't support Native Android Fingerprint API
        Spass spass = new Spass();
        try {
            spass.initialize(context);
            isFingerprintSupported = spass.isFeatureEnabled(Spass.DEVICE_FINGERPRINT);
        } catch (SsdkUnsupportedException | UnsupportedOperationException e) {
            //Error handling here
        }
    } else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // for devices which doesn't support Pass SDK

            FingerprintManager fingerprintManager = (FingerprintManager) getApplicationContext().getSystemService(Context.FINGERPRINT_SERVICE);
            if (!fingerprintManager.isHardwareDetected()) {
                // This device is not supporting fingerprint authentication     
            } else if (!fingerprintManager.hasEnrolledFingerprints()) {
                // User hasn't enrolled any fingerprints to authenticate with 
            } else {
                // Everything is ready for fingerprint authentication 
            }
        }
    }

请在AndroidManifest.xml中添加以下权限。

<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />

我希望这能有所帮助。


嗨,感谢您的回答,但问题是三星是否在M版本之后继续使用自己的指纹SDK,还是转而使用原生Android SDK。我们想知道这种情况适用于(a)随M版本一起发布的设备和(b)升级到M版本的设备。最终,我们决定忽略所有其他SDK,只支持具有本机SDK的设备。感谢您的回答。 - ColonD
@ColonD,您看了我的回答吗?我更新后没有收到您的任何评论。 - Vikasdeep Singh
@ColonD,既然您改变了想法,即要求,但是我的答案将涵盖所有情况,请接受我的答案,以便也能帮助其他人。 - Vikasdeep Singh
再次感谢您的回答。虽然您的回答确实展示了如何支持两个API,但我的问题是关于三星是否转向使用本机API,以便我们可以决定是否值得支持传递和本机。请参考Evgeniy Mishustin的回答:https://dev59.com/xlcO5IYBdhLWcg3woC9T#51168447 - ColonD
我从一开始就知道如何支持指纹API。问题是三星是否在他们的手机上使用原生的传递(这是我一开始的要求)。 - ColonD
显示剩余4条评论

1

根据我的经验,一些三星手机即使在Android M及以上版本中仍在使用Spass库。例如,我目前正在测试的移动操作系统为:Android 6.0.1(Galaxy Note 4 Edge)。 我编写了一些代码,以以下方式将输出打印到日志中:

   /*
    * This function evaluates which fingerprint helper should be instantiated (if any)
    */
    public static FingerprintHelper initializeFingerprintHelper(Context context){
        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");
                    }else{
                        logger.info("Android native fingerprint manager has no enrolled fingerprints");
                    }
                    return new AndroidFingerprintHelper(context);
                }

            }
        }
        try{
            logger.info("Android native fingerprint manager is null, trying Samsung SPASS rollback");

            Spass spass = new Spass();
            spass.initialize(context);
            if(spass.isFeatureEnabled(Spass.DEVICE_FINGERPRINT)){
                return new SamsungFingerprintHelper(context);
            }
        } catch (SsdkUnsupportedException e) {
            logger.error("Spass library is missing on the device");
        }
        return null;
    }

从控制台日志中可以看到,尽管设备上的Android版本为M(6.0.1),但该方法

manager.isHardwareDetected()

返回false,方法进入Spass库初始化并成功。因此,设备在Android M上肯定使用了Spass库。


所以,这是一个在棉花糖系统之前发布并升级到棉花糖系统的设备,对吧? - ColonD
@ColonD,我不能以100%的把握说出这件事。 - Evgeniy Mishustin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接