【问题标题】:How to detect fingerprint hardware in android 11如何在android 11中检测指纹硬件
【发布时间】:2021-05-22 07:48:01
【问题描述】:

如何检测手机是否有指纹硬件。我想要一个检测指纹硬件的代码。

我使用了这段代码,但是这段代码在“isHardwareDetected()”这个方法上显示错误。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    //Fingerprint API only available on from Android 6.0 (M)
    FingerprintManager fingerprintManager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
    if (!fingerprintManager.isHardwareDetected()) { 
        // Device doesn't support fingerprint authentication     
    } else if (!fingerprintManager.hasEnrolledFingerprints()) { 
        // User hasn't enrolled any fingerprints to authenticate with 
    } else { 
        // Everything is ready for fingerprint authentication 
    }
}

【问题讨论】:

  • FingerprintManager 在 API 级别 28 中已弃用,请改用 BiometricPromptBiometricManager

标签: android kotlin fingerprint android-fingerprint-api


【解决方案1】:

我对问题代码做了一些小改动,现在可以正常使用了。

但“FingerprintManagerCompat”类已被弃用

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val manager = FingerprintManagerCompat.from(this)
            if (!manager.isHardwareDetected) {
                Log.e("tag","Fingerprint hardware not detected.")
            } else if (!manager.hasEnrolledFingerprints()) {
                Log.e("tag","No fingerprint is set")
            } else {
                Log.e("tag","Fingerprint is set")
            }
        }

【讨论】:

  • 这很有用,但请提及已弃用类的替代方案。
  • 很快我会用其他类更新这个答案
【解决方案2】:

我也试过了,效果很好

f (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val fingerprintManager = FingerprintManagerCompat.from(this)
        if (!fingerprintManager .isHardwareDetected) {
            Log.e("tag","not detected.")
        } else if (!fingerprintManager .hasEnrolledFingerprints()) {
            Log.e("tag","No fingerprint is set")
        } else {
            Log.e("tag","Fingerprint is set")
        }
    }

【讨论】:

    【解决方案3】:

    AndroidManifest.xml内添加如下代码:

    <uses-feature android:name="android.hardware.fingerprint" android:required="true" />
    <uses-permission android:name="android.permission.USE_FINGERPRINT" />
    

    在需要检测硬件的地方使用它:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
                fingerprintManager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);
        
                if (!fingerprintManager.isHardwareDetected()) {
                    Toast.makeText(getApplicationContext(), "Your device doesn't support fingerprint authentication", Toast.LENGTH_SHORT).show();
                }
                if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(getApplicationContext(), "Please enable the fingerprint permission", Toast.LENGTH_SHORT).show();
        
            ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.USE_FINGERPRINT}, FingerprintHandler.FINGERPRINT_PERMISSION);
        
            }
        
            if (!fingerprintManager.hasEnrolledFingerprints()) {
                Toast.makeText(getApplicationContext(), "Your Device has no registered Fingerprints! Please register atleast one in your Device settings", Toast.LENGTH_LONG).show();
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      相关资源
      最近更新 更多