Android开启指纹验证

步骤:

  1. 首先要检测手机是否支持指纹识别的功能
  2. 其次要判断手机中是否已经录入了指纹
  3. 开启指纹验证

使用的类:

  • 1.FingerprintManager:主要用来协调管理和访问指纹识别硬件设备

  • 2.FingerprintManager.AuthenticationCallback这个一个callback接口,当指纹认证后系统会回调这个接口通知app认证的结果是什么

  • 3.FingerprintManager.AuthenticationResult这是一个表示认证结果的类,会在回调接口中以参数给出

  • 4.FingerprintManager.CryptoObject这是一个加密的对象类,用来保证认证的安全性,

Demo(一个页面有两个Button,一个是开启指纹验证,一个是取消指纹验证):

import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
import android.support.v4.os.CancellationSignal;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;

import com.example.a_0102.mylearn.R;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

/**
 * 1.FingerprintManager:主要用来协调管理和访问指纹识别硬件设备
 2.FingerprintManager.AuthenticationCallback这个一个callback接口,当指纹认证后系统会回调这个接口通知app认证的结果是什么
 3.FingerprintManager.AuthenticationResult这是一个表示认证结果的类,会在回调接口中以参数给出
 4.FingerprintManager.CryptoObject这是一个加密的对象类,用来保证认证的安全性,
 */
public class FingerPrintActivity extends AppCompatActivity {

    private Button btnCheck;
    private Button btnCancel;

    private CancellationSignal cancellationSignal;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_finger_print);
    }

    /**
     * 第一个参数是用于通过指纹验证取出AndroidKeyStore中的key的对象。crypto这是一个加密类的对象,指纹扫描器会使用这个对象来判断认证结果的合法性。
     * 这个对象可以是null,但是这样的话,就意味这app无条件信任认证的结果,虽然从理论上这个过程可能被攻击,数据可以被篡改,这是app在这种情况下必须承担的风险。
     * 因此,建议这个参数不要置为null。这个类的实例化有点麻烦,主要使用javax的security接口实现,
     * 通常来讲,用来加密指纹扫描结果的机制就是一个Javax.Crypto.Cipher对象。Cipher对象本身会使用由应用调用Android keystore的API产生一个key来实现上面说道的保护功能
     *
     * 第二个参数可以用来取消指纹验证,如果想手动关闭验证,可以调用该参数的cancel方法。
     *
     * 第三个参数没什么意义,就是传0就好了。
     *
     * 第四个参数最重要,由于指纹信息是存在系统硬件中的,app是不可以访问指纹信息的,所以每次验证的时候,系统会通过这个callback告诉你是否验证通过、验证失败等。
     * 第四个参数是handler,fingerprint中的消息都通过这个handler来传递消息,如果你传空,则默认创建一个在主线程上的handler来传递消息,没什么用,0传null好了。
     */

    public void check(View view){
        FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.from(this);
        cancellationSignal = new CancellationSignal();

        //判断指纹功能是否可用
        if(fingerprintManager.isHardwareDetected()){//需要添加权限USE_FINGERPRINT
            Log.e("--------->","isHardwareDetected");
            //手机中是否有已经登记的指纹,即是否录入过指纹,如果没有需要先输入密码在录入指纹
            if(fingerprintManager.hasEnrolledFingerprints()){
                Log.e("--------->","hasEnrolledFingerprints");
                //启动指纹识别
                fingerprintManager.authenticate(null, 0, cancellationSignal, new FingerprintManagerCompat.AuthenticationCallback() {
                    @Override
                    public void onAuthenticationError(int errMsgId, CharSequence errString) {
                        super.onAuthenticationError(errMsgId, errString);
                        Log.e("--------->","onAuthenticationError"+errMsgId+",errString:"+errString);
                    }

                    @Override
                    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
                        super.onAuthenticationHelp(helpMsgId, helpString);
                        Log.e("--------->","onAuthenticationHelp"+helpMsgId+",helpString:"+helpString);
                    }

                    @Override
                    public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
                        super.onAuthenticationSucceeded(result);
                        Log.e("--------->","onAuthenticationSucceeded"+result);
                    }

                    @Override
                    public void onAuthenticationFailed() {
                        super.onAuthenticationFailed();
                        Log.e("--------->","onAuthenticationFailed");
                    }
                },null);
            }
        }
    }

    public void cancel(View view){
        cancellationSignal.cancel();
    }
}

更多参考:
Android 6.0指纹识别App开发demo

猜你喜欢

转载自blog.csdn.net/hello_1s/article/details/81018478