我正在尝试实施生物识别提示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();
答案 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
此处仅列出两个版本
来源:https://mvnrepository.com/artifact/androidx.biometric/biometric
按照图书馆的描述,
生物识别库是可以添加到Android应用程序的静态库。它在运行P及更高版本的设备上调用BiometricPrompt,在较旧的设备上将显示一个compat对话框。与运行API 14或更高版本的设备兼容。
这意味着您只需要这个Compat库,它就可以在所有版本的Android上运行。对于高于Android 9和低于Android 9的版本,无需保留两个不同的版本。
答案 2 :(得分:0)
如果您有旧的android项目(即使它是混合android应用),请按照以下详细步骤操作:
所以我有一个Cordova android混合应用旧代码。使用Android Studio 3.2。构建gradle版本非常旧,为2.8,而gradle版本为3.3。
我首先将Android Studio升级到最新版本3.3.2
现在,我决定将整个项目迁移到androidX。记住,它甚至不会让我使用以前版本的Android Studio来做到这一点,我不知道为什么。
当我单击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
}
}
现在,App可以正常同步,构建正常。我再次尝试了Refactor-> Migrate to androidX。这次Android Studio开始重构代码,并向我提供了70条代码更改建议。
这些代码更改主要是头文件更改,例如:import“”。因此,我打开了此链接-https://developer.android.com/jetpack/androidx/migrate,并将每个导入语句更改为相等的androidx语句。
在复制粘贴所有更改之后,我再次编译并同步了代码。经过3个资源和代码编译错误,我能够构建代码。整个过程耗时1.2个小时。
最后,我能够将生物识别支持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"
}
}
最后,我能够构建完整的代码并对其进行同步。很高兴终于做到了。现在,我只需要使用生物特征API函数将其集成到我的代码中(请注意,此代码是3年前编写的,并已提供给我用于集成最新的生物特征API)。
是的,我需要逐步回答这样的问题。
仍然感谢所有帮助过的人。