코딩 일기장/Android(Kotlin)

[Android/Kotlin] 지문인식 만들기

minWachya 2022. 4. 8. 13:00
반응형

갑자기 지문인식 궁금해져서 만들어봄

너무나 간단...

 

결과 화면은 아래와 같은데.... 지문인식 다이얼로그..는 보안 정책상 캡쳐가 안된다해서 못찍음...

 

 

1. Manifest에 권한 추가

<!-- 지문 인식 권한 -->
<uses-permission android:name="android.permission.USE_BIOMETRIC" />

 

2. dependency 추가

implementation 'androidx.biometric:biometric:1.2.0-alpha04'

 

3. xml 만들기

<?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">

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="지문인식을 해주세요."
        android:layout_marginBottom="100dp"
        app:layout_constraintBottom_toTopOf="@+id/btn_fingerprint"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/btn_fingerprint"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="지문 인증하기"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

4. kt 코드 짜기

package com.example.myfingerprint

import androidx.biometric.BiometricPrompt
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import com.example.myfingerprint.databinding.ActivityMainBinding
import java.util.concurrent.Executor

private lateinit var binding: ActivityMainBinding
private lateinit var executor: Executor
private lateinit var biometricPrompt: BiometricPrompt
private lateinit var promptInfo: BiometricPrompt.PromptInfo

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        executor = ContextCompat.getMainExecutor(this@MainActivity)
        biometricPrompt = BiometricPrompt(this@MainActivity, executor,
            object : BiometricPrompt.AuthenticationCallback() {
                override fun onAuthenticationError(errorCode: Int,
                                                   errString: CharSequence) {
                    super.onAuthenticationError(errorCode, errString)
                    Toast.makeText(applicationContext, "에러", Toast.LENGTH_SHORT).show()
                    binding.textview.text = "에러 발생!"
                }

                override fun onAuthenticationSucceeded(
                    result: BiometricPrompt.AuthenticationResult) {
                    super.onAuthenticationSucceeded(result)
                    Toast.makeText(applicationContext, "성공", Toast.LENGTH_SHORT).show()
                    binding.textview.text = "지문인식에 성공하였습니다!"
                }

                override fun onAuthenticationFailed() {
                    super.onAuthenticationFailed()
                    Toast.makeText(applicationContext, "실패", Toast.LENGTH_SHORT).show()
                    binding.textview.text = "지문인식에 실패하였습니다..."
                }
            })

        promptInfo = BiometricPrompt.PromptInfo.Builder()
            .setTitle("지문 인증")
            .setSubtitle("기기에 등록된 지문을 이용하여 지문을 인증해주세요.")
            .setNegativeButtonText("취소")
            .build()

        // 버튼 클릭 시 지문인식
        binding.btnFingerprint.setOnClickListener{
            binding.textview.text = "지문인식 중..."
            biometricPrompt.authenticate(promptInfo)
        }

    }
}

참고

공식문서: https://developer.android.com/training/sign-in/biometric-auth?hl=ko 

 

생체 인식 인증 대화상자 표시  |  Android 개발자  |  Android Developers

생체 인식 인증 대화상자 표시 앱의 민감한 정보나 고급 콘텐츠를 보호하는 데는 얼굴 인식, 지문 인식 같은 생체 인식 인증을 요청하는 방법이 있습니다. 이 가이드에서는 앱에서 생체 인식 로

developer.android.com

https://stackoverflow.com/questions/58418466/android-biometricprompt-cannot-resolve-symbol-promptinfo

 

Android BiometricPrompt: Cannot resolve symbol PromptInfo

When I copied the following code from this developer.android.com tutorial about adding biometric authentication in your android app: BiometricPrompt.PromptInfo promptInfo = new

stackoverflow.com

https://velog.io/@jakeseo_me/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-With-Java-27-%EC%A7%80%EB%AC%B8%EC%9D%B8%EC%8B%9D-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0#%EA%B0%9C%EB%B0%9C-%ED%99%98%EA%B2%BD

 

안드로이드 With Java #28 지문인식 구현하기

biometric

velog.io

 

반응형