安卓M的FingerprintManager.isHardwareDetected()在三星Galaxy S5上返回false

18

我刚刚按照http://www.androidofficer.com/2016/06/g900vvru2dpd1-android-601-marshmallow.html上列出的手动指南将Verizion Samsung Galaxy S5 (SM-G900V) 更新到G900VVRU2DPD1版本。

当我运行下面的代码时,isHardwareDetected()返回“false”。我原本希望它会返回“true”。

我查找过谷歌,但没有找到关于S5指纹阅读器在 Marshmallow 下是否受支持的信息。是否有人了解S5的指纹阅读器是否受支持?

    FingerprintManager manager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);
    if (manager != null) {

        if (ActivityCompat.checkSelfPermission(this, permission.USE_FINGERPRINT) !=
                PackageManager.PERMISSION_GRANTED) {
            retVal.append(INDENT).append("Fingerprint permission was not granted")
                    .append(EOL);
        } else {
            retVal.append(INDENT).append("Fingerprint hardware detected: ")
                    .append(manager.isHardwareDetected()).append(EOL);
            retVal.append(INDENT).append("Has Enrolled Fingerprint(s): ")
                    .append(manager.hasEnrolledFingerprints()).append(EOL);
        }
    } else {
        retVal.append(INDENT).append("no FingerprintManager available").append(EOL);
    }

2
你解决了这个问题吗?我也遇到了同样的问题。 - Miguel
1个回答

11

问题终于解决了。看起来安卓默认的API无法处理一些三星设备,因此解决方案是为此问题添加三星库。

您可以在这里找到一些文档和库:http://developer.samsung.com/galaxy/pass

添加完库之后,您需要在清单文件中添加一个新权限:

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

最后,您可以使用这种方法:

private boolean isFingerprintSupported() {
  boolean isFingerprintSupported = fingerprintManager != null && fingerprintManager.isHardwareDetected();
  if (!isFingerprintSupported && SsdkVendorCheck.isSamsungDevice()) {
    Spass spass = new Spass();
    try {
        spass.initialize(context);
        isFingerprintSupported = spass.isFeatureEnabled(Spass.DEVICE_FINGERPRINT);
    } catch (SsdkUnsupportedException | UnsupportedOperationException e) {
        // Error handling
    }
  }
  return isFingerprintSupported;
}

嗨,米格尔,这对其他非三星设备有效吗? - Kennedy
1
@Kennedy 不是的,http://developer.samsung.com/galaxy/pass 上说了哪些设备可以使用他们的SDK:“任何支持指纹传感器和Android 4.2(Jelly Bean API 17)及以上版本的三星移动设备都可以使用指纹服务。” - Jules
如果您需要检查已注册的指纹,请使用以下代码: SpassFingerprint spassFingerprint = new SpassFingerprint(context); return spassFingerprint.hasRegisteredFinger(); - Nguyen Minh Hien
有人可以在三星Galaxy J7上确认一下吗? - Shishir Shetty

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