【问题标题】:Which Samsung devices do not support android's native fingerprint API?哪些三星设备不支持安卓的原生指纹 API?
【发布时间】:2017-08-04 06:34:10
【问题描述】:

我假设在 marshmallow 之前没有操作系统的手机支持指纹 API。

我的问题是:

(a) 是否所有/任何带有棉花糖的三星手机都支持安卓指纹 API

(b) 操作系统升级到 marshmallow 的三星手机是否支持 Android 指纹 API?

我读过这些:

Fingerprint scanner not detected when using Android 6.0 Fingerprint API on Samsung S5

Samsung galaxy note 4 fingerprint not found

Android FingerPrint API isHardwareDetected returns false for Samsung Note 4

Devices with fingerprint sensor above 6.0 which are not using Android fingerprint SDK

但没有明确的答案。三星的网站也提到所有三星设备都支持 Pass SDK,但没有提到 Android 指纹 API 支持

【问题讨论】:

  • 是的,它支持..几个月前我试过玩这些
  • 是的,但哪些设备不支持android的API?不同的人似乎有不同的体验,具体取决于所讨论的模型及其上的 android 版本
  • 我在 s7 marshmallow 上试过了。你想让它在哪个设备上运行?
  • 适用于我正在发布的应用程序。我想知道它在哪些设备上不起作用,因为我的用户可能会有稍旧的手机(不知道他们会拥有哪些)。所以我想确保最大的兼容性。如果手机数量很大,我会尽量确保对 pass SDK 和 android API 的支持
  • 另外,如果有用户报告无法使用该功能,这对故障排除很有帮助,我可以知道它是否是一个错误

标签: android version hardware-interface android-fingerprint-api samsung-mobile-sdk


【解决方案1】:

从我的小调查中发现了以下内容。 Pass API 将有助于在 android 6 之前具有指纹 api 的三星设备。 它是带有指纹的 2014 年设备。可以在此处找到设备列表。 https://en.wikipedia.org/wiki/Samsung_Galaxy 主要设备:

  1. Samsung Galaxy s5(及其修改 mini,plus)
  2. 三星 Galaxy Note 4 (Note 4 edge)

即使将 android 更新到 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" />
    

    我希望这会有所帮助。

    【讨论】:

    • 您好,感谢您的回答,但问题是三星是否继续使用自己的指纹 SDK 或者他们是否在 M 之后切换到本机 android SDK。我们想知道这个案例 (a) M 附带的设备和 (b) 更新到 M 的设备。我们最终决定忽略所有其他 SDK,只支持带有本机 SDK 的设备。不过还是谢谢你的回答
    • @ClonD 感谢您的耐心等待并使要求更加明确。我已经更新了我的答案。请看一看。我想你会从中得到一些指导。
    • @ColonD 你检查我的答案了吗?我更新后没有收到你的任何评论。
    • 嗨,很抱歉。您的代码似乎涵盖了有关检查这两个 API 的所有基础。由于我很久以前处理过这个问题,所以我决定只支持原生 API,所以我忘记了这一点。赞成您的答案,因为它应该适用于所有涉及三星手机的案例:)
    • @ColonD 由于您改变了主意,即要求,但 我的回答将涵盖所有情况 那么请接受我的回答,以便对其他人也有帮助。
    【解决方案3】:

    根据我自己的经验,我可以肯定地告诉您,即使在 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 lib 初始化并且它成功。所以设备肯定在android M上使用Spass库。

    【讨论】:

    • 那么,这是一个发布pre-marshmallow并更新为marshmallow的设备吧?
    • @ColonD,我不能说 100%。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    相关资源
    最近更新 更多