android - 有没有办法使用手机的内置身份验证来锁定您开发的应用程序?如何?
问题描述
我是 Android 开发的新手,不确定是否应该在这里或在堆栈交换中询问。
例如,我想构建一个临时的简单应用程序。仅出于该特定目的而不是长期的含义。我想节省时间建立/设置我自己的身份验证,也许是为了方便用户记住另一个密码。如果我的应用程序是由用户设置的,有没有一种方法可以利用手机的密码身份验证。它可以是别针、密码、图案。每次用户打开应用程序时,手机都会提示锁定屏幕,然后我才能使用它。
解决方案
在清单文件中
<uses-permission android:name="android.permission.USE_BIOMETRIC" /> //this is for SDK_INT >= 28
<uses-feature android:name="android.software.secure_lock_screen"/>//this is for below
在您的活动中,您可能应该为此使用空白视图活动
val km = getSystemService(KEYGUARD_SERVICE) as KeyguardManager
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
val executor = ContextCompat.getMainExecutor(this)
val biometricPrompt = BiometricPrompt(this, executor,
object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationError(errorCode: Int,
errString: CharSequence) {
super.onAuthenticationError(errorCode, errString)
Toast.makeText(applicationContext,
"Authentication error: $errString", Toast.LENGTH_SHORT)
.show()
}
override fun onAuthenticationSucceeded(
result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
Toast.makeText(applicationContext,
"Authentication succeeded!", Toast.LENGTH_SHORT)
.show()
}
override fun onAuthenticationFailed() {
super.onAuthenticationFailed()
Toast.makeText(applicationContext, "Authentication failed",
Toast.LENGTH_SHORT)
.show()
}
})
promptInfo = BiometricPrompt.PromptInfo.Builder()
.setTitle("Biometric login for my app")
.setSubtitle("Log in using your biometric credential")
.setNegativeButtonText("Use account password")
.build()
biometricPrompt.authenticate(promptInfo)
}else{
@Suppress("DEPRECATION")
//Added in API level 21
//Deprecated in API level 29 as per android doc
val i = km.createConfirmDeviceCredentialIntent("title", "description")
startActivityForResult(i, 1000)
}
然后在活动结果中
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode==1000&&resultCode==Activity.RESULT_OK){
//verified open next activity
}
}
推荐阅读
- sql - 在 Select 字段中添加插件中安装的 ACF
- python - virtualenv中的QtWebEngineWidgets:ImportError:libQt5QmlModels.so.5:无法打开共享对象文件:没有这样的文件或目录
- docker - 如何在 Docker Swarm 中正确配置 HAProxy 以自动将流量路由到复制服务(通过 SSL)?
- python - 重塑列表/数组
- python - Pandas groupby dropna=False 不适用于申请
- bash - Shell 脚本应该等到 kubernetes pod 运行
- android - Flutter将项目从sharedPreferenes json填充到listView中
- powershell - 交互式 SendKeys PowerShell 脚本
- javascript - JS:箭头函数还是数组映射?
- python - 如何按元素划分两个数据框