Android M FingerprintManager.isHardwareDetected() возвращает false на Samsung Galaxy S5
Я только что обновил Verizion Samsung Galaxy S5 (SM-G900V) до версии G900VVRU2DPD1 с помощью инструкций, перечисленных по адресу http://www.androidofficer.com/2016/06/g900vvru2dpd1-android-601-marshmallow.html
Когда я запускаю приведенный ниже код, isHardwareDetected() возвращает false. Я ожидаю, что это вернет "истина".
Поиск в Google, который я сделал, не привел к получению какой-либо информации о том, что сканер отпечатков пальцев 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);
}
1 ответ
Наконец-то решено. Похоже, что Android по умолчанию API не может обрабатывать некоторые устройства Samsung, поэтому решение состоит в том, чтобы добавить библиотеки Samsung для этой проблемы.
Вы можете найти некоторую документацию и библиотеки здесь: 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;
}