Links & Dependenciesactivity_main.xmlMainActivity.ktactivity_2.xmlActivity2.kt
BiometricPrompt dependency:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="openActivity2" android:text="Open Activity2" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
package com.codinginflow.biometricpromptexample import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.Toast import androidx.biometric.BiometricManager import androidx.biometric.BiometricPrompt import androidx.core.content.ContextCompat class MainActivity : AppCompatActivity() { private lateinit var biometricPrompt: BiometricPrompt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) biometricPrompt = createBiometricPrompt() //BiometricManager.from(this).canAuthenticate() //biometricPrompt.cancelAuthentication() } private fun createBiometricPrompt(): BiometricPrompt { val executor = ContextCompat.getMainExecutor(this) val callback = object : BiometricPrompt.AuthenticationCallback() { override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { Toast.makeText( this@MainActivity, "onAuthenticationError\nerrorCode: $errorCode\nerrString: $errString", Toast.LENGTH_LONG ).show() } override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) { val intent = Intent(this@MainActivity, Activity2::class.java) startActivity(intent) } override fun onAuthenticationFailed() { Toast.makeText(this@MainActivity, "onAuthenticationFailed", Toast.LENGTH_SHORT).show() } } return BiometricPrompt(this, executor, callback) } private fun createPromptInfo(): BiometricPrompt.PromptInfo { val promptInfo = BiometricPrompt.PromptInfo.Builder() .setTitle("Title") .setSubtitle("Subtitle") .setDescription("Description") //.setNegativeButtonText("Cancel") .setDeviceCredentialAllowed(true) //.setConfirmationRequired(false) .build() return promptInfo } fun openActivity2(view: View) { val promptInfo = createPromptInfo() biometricPrompt.authenticate(promptInfo) } }
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Activity2"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Activity2" android:textAppearance="@style/TextAppearance.AppCompat.Large" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
package com.codinginflow.biometricpromptexample import androidx.appcompat.app.AppCompatActivity import android.os.Bundle class Activity2 : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_2) } }