비밀번호를 저장하기 위해 개인 Android 앱을 개발하고 있습니다. (마지막 패스는 모바일로 지불되므로). 현재 사용 simple password authentication
하고 있지만 fingerprint
scanner
.
파일 AndroidManifest.xml
:
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
파일 MainActivity.java
:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//Fingerprint API only available on from Android 6.0 (M)
FingerprintManager fingerprintManager = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE);
if (!fingerprintManager.isHardwareDetected()) {
// Device doesn't support fingerprint authentication
} else if (!fingerprintManager.hasEnrolledFingerprints()) {
// User hasn't enrolled any fingerprints to authenticate with
} else {
// Everything is ready for fingerprint authentication
}
}
하지만 실제로 어떻게 authenticate
전화 소유자를 사용 fingerprints
합니까?
최신 정보:
나는 Lubomir Babev의 대답과 그 완벽을 사용했습니다. onAuthSucceded를 구현하는 두 가지 메서드를 채 웁니다. onAuthFailed는 인증이 성공하면 처리 할 수 없었고 Android 스튜디오가 저를 만들었 기 때문에 권한 검사도 추가해야했습니다.
public void startListening() {
if (isFingerScannerAvailableAndSet()) {
try {
if (ActivityCompat.checkSelfPermission(mContext.getApplicationContext(), Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
}
mFingerprintManager.authenticate(null, mCancellationSignal, 0 /* flags */, mAuthenticationCallback, null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
과
public void startListening() {
if (isFingerScannerAvailableAndSet()) {
try {
if (ActivityCompat.checkSelfPermission(mContext.getApplicationContext(), Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
}
mFingerprintManager.authenticate(null, mCancellationSignal, 0 /* flags */, mAuthenticationCallback, null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
지문 이벤트에 대한 사용자 지정 처리기 클래스를 만듭니다.
import android.content.Context;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Build;
import android.os.CancellationSignal;
public class FingerprintHandler {
private Context mContext;
private FingerprintManager mFingerprintManager = null;
private CancellationSignal mCancellationSignal;
private FingerprintManager.AuthenticationCallback mAuthenticationCallback;
private OnAuthenticationSucceededListener mSucceedListener;
private OnAuthenticationErrorListener mFailedListener;
public interface OnAuthenticationSucceededListener {
void onAuthSucceeded();
}
public interface OnAuthenticationErrorListener {
void onAuthFailed();
}
public void setOnAuthenticationSucceededListener (OnAuthenticationSucceededListener listener){
mSucceedListener = listener;
}
public void setOnAuthenticationFailedListener(OnAuthenticationErrorListener listener) {
mFailedListener = listener;
}
public FingerprintHandler(Context context){
mContext = context;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mFingerprintManager = context.getSystemService(FingerprintManager.class);
mCancellationSignal = new CancellationSignal();
mAuthenticationCallback = new FingerprintManager.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errorCode, CharSequence errString) {
super.onAuthenticationError(errorCode, errString);
}
@Override
public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
super.onAuthenticationHelp(helpCode, helpString);
}
@Override
public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
if( mSucceedListener != null )
mSucceedListener.onAuthSucceeded();
}
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
if (mFailedListener != null)
mFailedListener.onAuthFailed();
}
};
}
}
public void startListening(){
if (isFingerScannerAvailableAndSet() ) {
try{
mFingerprintManager.authenticate(null, mCancellationSignal, 0 /* flags */, mAuthenticationCallback, null);
} catch (Exception e){
e.printStackTrace();
}
}
}
public void stopListening(){
if ( isFingerScannerAvailableAndSet() ) {
try {
mCancellationSignal.cancel();
mCancellationSignal = null;
} catch (Exception e){
e.printStackTrace();
}
}
}
public boolean isFingerScannerAvailableAndSet(){
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
return false;
if( mFingerprintManager == null )
return false;
if( !mFingerprintManager.isHardwareDetected() )
return false;
if( !mFingerprintManager.hasEnrolledFingerprints())
return false;
return true;
}
}
그런 다음 활동에서
FingerprintHandler.OnAuthenticationSucceededListener, FingerprintHandler.OnAuthenticationErrorListener
지문 매개 변수 생성 :
private FingerprintHandler mFingerprintHandler;
그 후 onCreate 메서드에서이 지문 처리기를 초기화합니다.
mFingerprintHandler = new FingerprintHandler(this);
mFingerprintHandler.setOnAuthenticationSucceededListener(this);
mFingerprintHandler.setOnAuthenticationFailedListener(this);
다음을 사용하여 지문을 사용할 수 있는지 확인하고 활동에 설정할 수 있습니다.
if( mFingerprintHandler.isFingerScannerAvailableAndSet() ){
// show image or text or do something
}
구현 된 방법으로 지문 응답을 처리 할 수 있습니다.
@Override
public void onAuthSucceeded() {
//fingerprint auth succeded go to next activity (or do something)
}
@Override
public void onAuthFailed() {
//fingerpring auth failed, show error toast (or do something)
}
그리고 당신은 준비되었습니다! :) onPause 및 onResume 메서드에서 지문 인식을 중지하고 시작하는 것을 잊지 마십시오.
@Override
public void onResume() {
super.onResume();
mFingerprintHandler.startListening();
}
@Override
public void onPause() {
super.onPause();
mFingerprintHandler.stopListening();
}
해피 코딩 :)))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다