前提
・端末に指紋認証機能が搭載されていること。
・端末に指紋を登録していること。
説明
参考: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は省略します。
完成したスクリーンショットです。
以上です。