본문 바로가기
프로그래밍/Android

[Android] 지문인식 구현

by Youngs_ 2022. 12. 26.

FingerprintManager 클래스가 deprecated 된 후 대체방안이다

여기에 구현방법이 있다.

이제는 지문인식용 클래스를 따로 빼는 게 아니라 생체정보 인증 자체를 하나의 클래스로 묶어서 다루려고 하는 것 같다.

그래서 BIOMETRIC이라는 키워드 자체로 묶였다.

Manifest 권한 추가하기

먼저, 내 앱에 생체인증을 할 수 있는 권한을 주자

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

위의 권한을 추가하면 된다.

dependency 추가하기

implementation 'androidx.biometric:biometric:1.0.1'

위와 같이 androidx.biometric 을 추가해주면 된다.

지문인식에 이용할 Activity Layout 구성하기

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="20dp"
        android:text="지문 인증하기"
        android:textSize="30dp"
        android:gravity="center"
        android:id="@+id/buttonAuthWithFingerprint"
        />

</LinearLayout>

위와 같이 구성했다.

지문인식에 이용할 Activity 구성하기

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.biometric.BiometricPrompt;
import androidx.core.content.ContextCompat;

import java.util.concurrent.Executor;

public class AuthFingerprintActivity extends AppCompatActivity {

    private Executor executor;
    private BiometricPrompt biometricPrompt;
    private BiometricPrompt.PromptInfo promptInfo;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_auth_fingerprint );


        executor = ContextCompat.getMainExecutor(this);
        biometricPrompt = new BiometricPrompt(this,
                executor, new BiometricPrompt.AuthenticationCallback() {
            @Override
            public void onAuthenticationError(int errorCode,
                                              @NonNull CharSequence errString) {
                super.onAuthenticationError(errorCode, errString);
                Toast.makeText(getApplicationContext(),
                        R.string.auth_error_message, Toast.LENGTH_SHORT)
                        .show();
            }

            @Override
            public void onAuthenticationSucceeded(
                    @NonNull BiometricPrompt.AuthenticationResult result) {
                super.onAuthenticationSucceeded(result);
                Toast.makeText(getApplicationContext(),
                        R.string.auth_success_message, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAuthenticationFailed() {
                super.onAuthenticationFailed();
                Toast.makeText(getApplicationContext(), R.string.auth_fail_message,
                        Toast.LENGTH_SHORT)
                        .show();
            }
        });

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

        //  사용자가 다른 인증을 이용하길 원할 때 추가하기

        Button biometricLoginButton = findViewById(R.id.buttonAuthWithFingerprint);
        biometricLoginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                biometricPrompt.authenticate(promptInfo);
            }
        });

    }
}

이건 뭐 그냥 공식문서 복붙하면 된다.

프롬프트를 빌드할 때 사용되는 세부적인 옵션들은 여기에 있다.

결과

 


출처 : 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

 

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

biometric

velog.io

 

댓글