Android

【Android】指紋認証を実装

前提

・端末に指紋認証機能が搭載されていること。
・端末に指紋を登録していること。

説明

参考:https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager.html?hl=ja
まず、指紋認証用のパーミッションが必要になります。

<uses-permission android:name="android.permission.USE_FINGERPRINT" />

残りはコードのみなので、順番に説明していきます。
・FingerprintManagerを呼ぶ。

getSystemService(FINGERPRINT_SERVICE);

・端末に指紋認証機能が搭載されているか判定する。

isHardwareDetected()

・端末に指紋登録がされているか判定する。

hasEnrolledFingerprints()

・指紋認証

void authenticate (FingerprintManager.CryptoObject crypto, 
                CancellationSignal cancel, 
                int flags, 
                FingerprintManager.AuthenticationCallback callback, 
                Handler handler)

crypto:基本的にnullで問題ないです。
cancel:基本的にnullで問題ないです。
flags: 0を設定します。
callback:指紋認証後のコールバックが呼ばれる部分です。
handler:基本的にnullで問題ないです。

サンプル実装

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

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

        FingerprintManager fingerprintManager =
                (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);
        try {
            if (fingerprintManager.isHardwareDetected() &&
                    fingerprintManager.hasEnrolledFingerprints()) {
                fingerprintManager.authenticate(
                        null,
                        null,
                        0,
                        new AuthenticationCallback() {
           // エラー
                    @Override
                    public void onAuthenticationError(
                            int errorCode,
                            CharSequence errString) {
                        Log.e(TAG, "ERROR:" + errorCode + ":" + errString);
                    }
                    // 指紋認証失敗
                    @Override
                    public void onAuthenticationFailed() {
                        Log.i(TAG, "Failed");
                    }
           // 指紋認証成功
                    @Override
                    public void onAuthenticationSucceeded(AuthenticationResult result) {
                        Intent intent = new Intent(MainActivity.this, NextActivity.class);
                        startActivity(intent);
                    }
                }, null);
            }
        } catch (SecurityException secEx) {
            secEx.printStackTrace();
        }
    }
}

activity_main.xml

<RelativeLayout 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"
    android:background="@android:color/white">

    <TextView
        android:id="@+id/title_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:text="指紋認証画面"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="@android:color/black" />

    <ImageView
        android:id="@+id/fingerprint_image_view"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_below="@+id/title_text_view"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="20dp"
        android:scaleType="fitCenter"
        android:src="@drawable/ic_fp_40px" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/fingerprint_image_view"
        android:layout_alignTop="@+id/fingerprint_image_view"
        android:layout_marginLeft="20dp"
        android:layout_toRightOf="@+id/fingerprint_image_view"
        android:gravity="center"
        android:text="指紋認証を行ってください。"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="@android:color/black" />


</RelativeLayout>

指紋認証後に遷移するNextActivityは省略します。

完成したスクリーンショットです。

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です