繁体   English   中英

如何在低于Android 9.0的版本中使用Biometric Prompt API

[英]How to use Biometric Prompt API in versions lower than Android 9.0

我正在尝试使用指纹验证来实现生物识别提示API以对用户进行身份验证。 我成功地能够整合生物识别提示,它正在开发andorid 9.0。 但正如文档所示,Biometric api也向后兼容,但是当我使用下面的代码构建对话框时,它会显示API支持警告。

调用需要API级别28(当前最小值为15):new android.hardware.biometrics.BiometricPrompt.Builder less ...(Ctrl + F1)此检查扫描应用程序中的所有Android API调用,并警告任何调用不适用于此应用程序所针对的所有版本(根据清单中的最小SDK属性)

mBiometricPrompt = new BiometricPrompt.Builder(this)
                        .setDescription("Description")
                        .setTitle("Title")
                        .setSubtitle("Subtitle")
                        .setNegativeButton("Cancel", getMainExecutor(), new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                Log.i(TAG, "Cancel button clicked");
                            }
                        })
                        .build();

我可以做些什么来使这个工作在较低的apis? 这是截图。 在此输入图像描述

看起来旧版本的Biometric Prompt API仍处于alpha状态。 如果您对alpha版本没问题,可以在build.gradle使用它

compile group: 'androidx.biometric', name: 'biometric', version: '1.0.0-alpha02'

资料来源: https//mvnrepository.com/artifact/androidx.biometric/biometric/1.0.0-alpha02

此处仅列出两个版本

  • 1.0.0-alpha01
  • 1.0.0-alpha02

资料来源: https//mvnrepository.com/artifact/androidx.biometric/biometric

根据图书馆的描述,它说

生物识别库是一个静态库,您可以将其添加到Android应用程序中。 它在运行P和更高版本的设备上调用BiometricPrompt,在旧设备上将显示compat对话框。 兼容运行API 14或更高版本的设备。

这意味着你需要的只是这个compat库,它适用于所有版本的Android。 无需为Android 9及以下Android 9保留两个不同的版本。

这是我对androidx.biometric的实现, Rohit5k2建议。 这是Kotlin,但我相信这不会是个问题。 希望这可以帮助

fun FragmentActivity.auth(successCallback: () -> Unit, cancelSignal: CancellationSignal = CancellationSignal()) {
    if (Build.VERSION.SDK_INT < 23) {
        successCallback()
        return
    }

    val biometricPrompt = BiometricPrompt(this, MainThreadExecutor(), object : BiometricPrompt.AuthenticationCallback() {
        override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
            super.onAuthenticationSucceeded(result)
            successCallback()
        }

        override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
            super.onAuthenticationError(errorCode, errString)
            if (errorCode == ERROR_NEGATIVE_BUTTON) {
                cancelSignal.cancel()
            }
        }
    })

    val promptInfo = BiometricPrompt.PromptInfo.Builder()
            .setTitle(getString(R.string.title))
            .setSubtitle(getString(R.string.auth))
            .setDescription(getString(R.string.biometric_desc))
            .setNegativeButtonText(getString(R.string.biometric_negative))
            .build()

    biometricPrompt.authenticate(promptInfo)
}

class MainThreadExecutor : Executor {
    private val handler = Handler(Looper.getMainLooper())

    override fun execute(r: Runnable) {
        handler.post(r)
    }
}

如果您有一个旧的Android项目(即使它是一个混合Android应用程序),请按照以下详细步骤操作:

  1. 所以我有一个Cordova android混合应用旧代码。 使用Android studio 3.2。 Build gradle版本很老,2.8和gradle版本是3.3。

  2. 我首先将Android工作室升级到最新版本3.3.2

  3. 现在我决定将整个项目迁移到androidX。 请记住它甚至不会让我使用以前版本的Android工作室,我不知道为什么。

  4. 当我点击Refactor - > Migrate to AndroidX时。 一个弹出窗口出现了“升级gradle版本。所以现在我将gradle版本更新到4.10.1,如果我将它升级到5.2(我不知道为什么,我还是Android的新手),它仍然会给我错误。”同时更新建立gradle到3.3.2

5.我的build.gradle(模块:App)看起来像这样:

apply plugin: 'com.android.application'

buildscript {
    repositories {
        jcenter{ url "http://jcenter.bintray.com/" }
        google()
    }

    // Switch the Android Gradle plugin version requirement depending on the
    // installed version of Gradle. This dependency is documented at
    // http://tools.android.com/tech-docs/new-build-system/version-compatibility
    // and https://issues.apache.org/jira/browse/CB-8143
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.2'
        classpath "com.google.gms:google-services:3.0.0" //FCM Config

    }
   }
  1. 现在App正在同步,构建正常。 我再次尝试了Refactor - >迁移到androidX。 这次Android工作室开始重构代码并为我提供了70个代码更改建议。

  2. 这些代码更改主要是头文件更改,如:import“”。 所以我打开了这个链接 - https://developer.android.com/jetpack/androidx/migrate并将每个import语句更改为相同的androidx语句。

  3. 复制粘贴所有更改后,我再次编译并同步代码。 在3个资源和代码编译错误之后,我能够构建代码。 整个过程耗时1.2小时。

  4. 最后我能够在build-extras.gradle(Module:app)中导入生物识别支持API,查看文件:

      dependencies { api 'androidx.appcompat:appcompat:1.0.2' api "com.squareup.picasso:picasso:2.4.0" api "com.google.android.material:material:1.1.0-alpha04" api "com.google.firebase:firebase-messaging:9.2.0" //FCM Config api 'com.rmtheis:tess-two:6.0.2' api 'com.github.bumptech.glide:glide:3.8.0' api 'androidx.legacy:legacy-support-v4:1.0.0' api "androidx.biometric:biometric:1.0.0-alpha03" } } 
  5. 最后,我能够构建完整的代码并进行同步。 很高兴终于做到了。 现在我只需要使用生物识别API函数将其集成到我的代码中(注意这段代码是3年前编写的,并提供给我用于集成最新的生物识别API)。

是的,我需要像这样一步一步地回答。

还要感谢所有帮助过的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM