首页 > 解决方案 > 有没有办法使用手机的内置身份验证来锁定您开发的应用程序?如何?

问题描述

我是 Android 开发的新手,不确定是否应该在这里或在堆栈交换中询问。

例如,我想构建一个临时的简单应用程序。仅出于该特定目的而不是长期的含义。我想节省时间建立/设置我自己的身份验证,也许是为了方便用户记住另一个密码。如果我的应用程序是由用户设置的,有没有一种方法可以利用手机的密码身份验证。它可以是别针、密码、图案。每次用户打开应用程序时,手机都会提示锁定屏幕,然后我才能使用它。

标签: androidauthentication

解决方案


在清单文件中

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

推荐阅读