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

时间:2018-12-03 08:26:11

标签: android android-fingerprint-api

我正在尝试实施生物识别提示API,以使用指纹验证来验证用户身份。我能够成功集成Biometric提示,并且它正在Andorid 9.0上运行。但是正如文档所示,Biometric api也向后兼容,但是当我使用以下代码构建对话框时,它会显示API支持警告。

  

调用需要API级别28(当前最小值为15):新   android.hardware.biometrics.BiometricPrompt.Builder更少...(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();

我该怎么做才能在较低的api上实现此功能?这是截图。 enter image description here

3 个答案:

答案 0 :(得分:2)

这是我的 androidx.biometric 的实现, Rohit5k2 建议。是科特林,但我敢肯定这不会有问题。希望这会有所帮助

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)
    }
}

答案 1 :(得分:1)

看起来像旧版本的生物特征提示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的版本,无需保留两个不同的版本。

答案 2 :(得分:0)

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

  1. 所以我有一个Cordova android混合应用旧代码。使用Android Studio 3.2。构建gradle版本非常旧,为2.8,而gradle版本为3.3。

  2. 我首先将Android Studio升级到最新版本3.3.2

  3. 现在,我决定将整个项目迁移到androidX。记住,它甚至不会让我使用以前版本的Android Studio来做到这一点,我不知道为什么。

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

5。我的build.gradle(模块:应用程序)如下所示:

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-> Migrate to androidX。这次Android Studio开始重构代码,并向我提供了70条代码更改建议。

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

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

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

        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)。

是的,我需要逐步回答这样的问题。

仍然感谢所有帮助过的人。