android 在API级别28中不推荐使用USE_FINGEPRINT

yrefmtwq  于 2023-05-12  发布在  Android
关注(0)|答案(3)|浏览(201)

常量USE_FINGERPRINT在API级别28中被弃用,我们应该使用更通用的USE_BIOMETRIC,它已在相同的API级别中添加。
我在Manifest中交换了这些常量,在调用FingerprintManagerCompat.from(context).isHardwareDetected()时出现错误。

错误为:

缺少所需的权限- USE_FINGERPRINT
这是因为28.0.0-rc 3 support v4 lib中FingerprintManagerCompat中的@RequiresPermission("android.permission.USE_FINGERPRINT")注解。
我是否可以忽略此问题并继续使用新权限?

mwkjh3gx

mwkjh3gx1#

我也遇到过同样的问题,我的简短回答是忽略弃用,只要你只想在你的应用程序中支持指纹认证。
正如在google dev blog中所述,由于API 28,谷歌推出了新的biometrics API,简化了生物识别认证的整个过程。它们为auth-dialog提供了一个简单的构建器。此外,它们还支持人脸和虹膜检测--如果你想支持它,这只是时间问题,可能值得升级。
到目前为止,我发现的唯一缺点是,如果你想检查例如。如果指纹硬件可用,则必须启动身份验证过程来检查此信息并等待错误回调。已弃用的指纹API为此提供了isHardwareDetected()hasEnrolledFingerprints()等方法。在这种情况下,如果您依赖这些信息,您可能需要重新设计应用程序。这些方法被弃用的原因可能是,它只支持指纹,因此升级它不是一个坏主意。
Google还为API 28以下的设备提供了 compat'androidx.biometric:biometric:1.0.0-alpha02'版本,似乎通过导入此依赖项,您可以简单地切换到USE_BIOMETRIC权限,而无需修改应用中的任何其他内容-您将不再受到警告的困扰。因为它只是在alpha阶段,我会小心使用它。因此,只要您不使用生物识别API中的任何内容,您也可以简单地忽略这个问题,并在希望支持其他生物识别身份验证方法时再次面对它。

编辑:现在发布了compat库的beta版本,'androidx.biometric:biometric:1.0.0-beta01'。更多信息,check here

现在,compat库的稳定版本将于2019年12月18日发布,“androidx.biometric:biometric:1.0.1”。关于Click here的更多信息。

qmelpv7a

qmelpv7a2#

biometrics API提供用于错误处理的生物统计常数

override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
    super.onAuthenticationError(errorCode, errString)

    //The device does not have a biometric sensor.
    if (errorCode == BiometricPrompt.ERROR_HW_NOT_PRESENT){
      //Do something
    }
}
8wtpewkr

8wtpewkr3#

我知道现在已经很晚了,但是对于那些想知道你应该做什么的人来说,使用以下代码:

首先添加此依赖:

implementation 'androidx.biometric:biometric:1.1.0'

然后在你的登录活动中写这段代码:

'BiometricManager biometricManager = BiometricManager.from(this);

// this Switch case is for detecting Finger print sensor and its situation
switch (biometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_WEAK)) {
    case BiometricManager.BIOMETRIC_SUCCESS ->
            //this method is called when sensor exist
            Toast.makeText(this, "sensor found!", Toast.LENGTH_SHORT).show();

    case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE ->
        //this method is called when sensor not found
            Toast.makeText(this, "no sensor found!", Toast.LENGTH_SHORT).show();

    case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE ->
        //this method is called when sensor isn't available
            Toast.makeText(this, "not available", Toast.LENGTH_SHORT).show();

    case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED ->
        //this method is called when there is no saved finger print exist on your phone
            Toast.makeText(this, "There is no fingerprint saved on your phone!", Toast.LENGTH_SHORT).show();
}

Executor executor = ContextCompat.getMainExecutor(this);

BiometricPrompt biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
    @Override
    public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
        super.onAuthenticationError(errorCode, errString);

        //this method called when finger print not recognized by sensor after many attempts
        //sensor disabled for some seconds and can't be used
        // you have to wait for this error to clear automatically

        //YOUR CODE
    }

    @Override
    public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
        super.onAuthenticationSucceeded(result);

        //this method called when finger print detected successfully

        //YOUR CODE
    }

    @Override
    public void onAuthenticationFailed() {
        super.onAuthenticationFailed();

        //this method called when finger print not recognized by sensor

        //YOUR CODE
    }
});

// creating promptInfo panel
BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()
        .setTitle("Login")
        .setDescription("For Login put your finger on the sensor")
        //can use subtitle aswell
       // .setSubtitle()
        .setNegativeButtonText("cancel")
        .build();

//Let's say we have a Login button so ...
loginbutton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //This method authenticate your finger print
        biometricPrompt.authenticate(promptInfo);
    }
});

相关问题