android 指纹识别调用实现方法及示例代码
activity_main.xml源码
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.liu.finger.MainActivity"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="HelloWorld!" android:textSize="18sp"/> <Button android:id="@+id/btn_activity_main_finger" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_below="@+id/textView" android:layout_marginTop="54dp" android:text="指纹识别"/> </LinearLayout>
MainActivity.java源码
packagecom.liu.finger;
importandroid.Manifest;
importandroid.app.KeyguardManager;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.pm.PackageManager;
importandroid.hardware.fingerprint.FingerprintManager;
importandroid.os.Bundle;
importandroid.os.CancellationSignal;
importandroid.support.v4.app.ActivityCompat;
importandroid.support.v4.app.FragmentActivity;
importandroid.util.Log;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.Toast;
publicclassMainActivityextendsFragmentActivity{
FingerprintManagermanager;
KeyguardManagermKeyManager;
privatefinalstaticintREQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS=0;
privatefinalstaticStringTAG="finger_log";
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
manager=(FingerprintManager)this.getSystemService(Context.FINGERPRINT_SERVICE);
mKeyManager=(KeyguardManager)this.getSystemService(Context.KEYGUARD_SERVICE);
Buttonbtn_finger=(Button)findViewById(R.id.btn_activity_main_finger);
btn_finger.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
if(isFinger()){
Toast.makeText(MainActivity.this,"请进行指纹识别",Toast.LENGTH_LONG).show();
Log(TAG,"keyi");
startListening(null);
}
}
});
}
publicbooleanisFinger(){
//androidstudio上,没有这个会报错
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.USE_FINGERPRINT)!=PackageManager.PERMISSION_GRANTED){
Toast.makeText(this,"没有指纹识别权限",Toast.LENGTH_SHORT).show();
returnfalse;
}
Log(TAG,"有指纹权限");
//判断硬件是否支持指纹识别
if(!manager.isHardwareDetected()){
Toast.makeText(this,"没有指纹识别模块",Toast.LENGTH_SHORT).show();
returnfalse;
}
Log(TAG,"有指纹模块");
//判断是否开启锁屏密码
if(!mKeyManager.isKeyguardSecure()){
Toast.makeText(this,"没有开启锁屏密码",Toast.LENGTH_SHORT).show();
returnfalse;
}
Log(TAG,"已开启锁屏密码");
//判断是否有指纹录入
if(!manager.hasEnrolledFingerprints()){
Toast.makeText(this,"没有录入指纹",Toast.LENGTH_SHORT).show();
returnfalse;
}
Log(TAG,"已录入指纹");
returntrue;
}
CancellationSignalmCancellationSignal=newCancellationSignal();
//回调方法
FingerprintManager.AuthenticationCallbackmSelfCancelled=newFingerprintManager.AuthenticationCallback(){
@Override
publicvoidonAuthenticationError(interrorCode,CharSequenceerrString){
//但多次指纹密码验证错误后,进入此方法;并且,不能短时间内调用指纹验证
Toast.makeText(MainActivity.this,errString,Toast.LENGTH_SHORT).show();
showAuthenticationScreen();
}
@Override
publicvoidonAuthenticationHelp(inthelpCode,CharSequencehelpString){
Toast.makeText(MainActivity.this,helpString,Toast.LENGTH_SHORT).show();
}
@Override
publicvoidonAuthenticationSucceeded(FingerprintManager.AuthenticationResultresult){
Toast.makeText(MainActivity.this,"指纹识别成功",Toast.LENGTH_SHORT).show();
}
@Override
publicvoidonAuthenticationFailed(){
Toast.makeText(MainActivity.this,"指纹识别失败",Toast.LENGTH_SHORT).show();
}
};
publicvoidstartListening(FingerprintManager.CryptoObjectcryptoObject){
//androidstudio上,没有这个会报错
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.USE_FINGERPRINT)!=PackageManager.PERMISSION_GRANTED){
Toast.makeText(this,"没有指纹识别权限",Toast.LENGTH_SHORT).show();
return;
}
manager.authenticate(cryptoObject,mCancellationSignal,0,mSelfCancelled,null);
}
/**
*锁屏密码
*/
privatevoidshowAuthenticationScreen(){
Intentintent=mKeyManager.createConfirmDeviceCredentialIntent("finger","测试指纹识别");
if(intent!=null){
startActivityForResult(intent,REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);
}
}
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
if(requestCode==REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS){
//Challengecompleted,proceedwithusingcipher
if(resultCode==RESULT_OK){
Toast.makeText(this,"识别成功",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"识别失败",Toast.LENGTH_SHORT).show();
}
}
}
privatevoidLog(Stringtag,Stringmsg){
Log.d(tag,msg);
}
}
通过此文希望能帮助开发Android指纹识别的朋友,谢谢大家对本站的支持!