Google官方指纹识别接口最简单调用示例

       最近做了一个功能,需要添加指纹识别;我们都知道指纹识别接口是Google在6.0及以后才提供了相关的接口,所以今天我们讨论的都是基于Android API开发版本大于等于23(6.0)且硬件支持的机型。其他不做讨论。

       下面就来看看实现指纹识别究竟有多么简单,首先我先说一下实现方式,第一种是通过FingerPrintManager方式,还有一种是通过v4包的FingerPrintManagerCompat方式。下面就来看看实现流程:

(1)方式1

  • 第一步:获取FingerPrintManager实例
 FingerprintManager manager;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
 manager = this.getSystemService(FingerprintManager.class);//方式1            
//manager=(FingerprintManager)this.getSystemService(Context.FINGERPRINT_SERVICE);//方式2
        }
  • 第二步:开启指纹识别并添加识别结果回调接口
 manager.authenticate(null, null, 0, new FingerprintManager.AuthenticationCallback() {
                    @Override
                    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
                        super.onAuthenticationSucceeded(result);
                        Log.e(TAG, "FingerprintManager: 指纹识别成功");
                    }

                    @Override
                    public void onAuthenticationFailed() {
                        super.onAuthenticationFailed();
                        Log.e(TAG, "FingerprintManager: 指纹识别失败");
                    }
                }, null);

(2)方式2

  • 第一步:获取FingerPrintManagerCompat实例
FingerprintManagerCompat managerCompat;
managerCompat = FingerprintManagerCompat.from(this);
  • 第二步:开启指纹识别并添加结果回调接口
 managerCompat.authenticate(null, 0, null, new FingerprintManagerCompat.AuthenticationCallback() {
                    @Override
                    public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
                        super.onAuthenticationSucceeded(result);
                        Log.e(TAG, "FingerprintManagerCompat: 指纹识别成功");
                    }

                    @Override
                    public void onAuthenticationFailed() {
                        super.onAuthenticationFailed();
                        Log.e(TAG, "FingerprintManagerCompat: 指纹识别失败");
                    }
                }, null);

可见,两种方式很相似也很简单。更多关于其中参数和接口的细节可参见官方说明。注意需要添加一下权限,当然这个官方说明都是有的。

 示例代码:

package com.hfut.operationfingerprint;

import android.Manifest;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Build;
import android.os.CancellationSignal;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

/**
 * @author why
 * @date 2019-1-8 11:50:02
 */
public class SimplifyActivity extends AppCompatActivity {

    FingerprintManagerCompat managerCompat;
    FingerprintManager manager;
    private static final String TAG = "SimplifyActivitywhy";

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

    private void initData() {
        managerCompat = FingerprintManagerCompat.from(this);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//6.0及以上
            manager = this.getSystemService(FingerprintManager.class);
            //manager= (FingerprintManager) this.getSystemService(Context.FINGERPRINT_SERVICE);
        }
    }

    /**
     * Test fingerprint identification
     *
     * @param view
     */
    @RequiresApi(api = Build.VERSION_CODES.M)
    public void fingerprintTest(View view) {
        if (isSatisfactionFingerprint()) {
            if (managerCompat.hasEnrolledFingerprints()) {
                //TODO Start Fingerprint sensor and add result callback
                managerCompat.authenticate(null, 0, null, new FingerprintManagerCompat.AuthenticationCallback() {
                    @Override
                    public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
                        super.onAuthenticationSucceeded(result);
                        Log.e(TAG, "FingerprintManagerCompat: 指纹识别成功");
                    }

                    @Override
                    public void onAuthenticationFailed() {
                        super.onAuthenticationFailed();
                        Log.e(TAG, "FingerprintManagerCompat: 指纹识别失败");
                    }
                }, null);

            } else {
                Log.d(TAG, "FingerprintManagerCompat: 请先采集指纹");
            }

//            if (manager.hasEnrolledFingerprints()) {
//                //Log.e(TAG, "FingerprintManager: 实现指纹识别" );
//                manager.authenticate(null, null, 0, new FingerprintManager.AuthenticationCallback() {
//                    @Override
//                    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
//                        super.onAuthenticationSucceeded(result);
//                        Log.e(TAG, "FingerprintManager: 指纹识别成功");
//                    }
//
//                    @Override
//                    public void onAuthenticationFailed() {
//                        super.onAuthenticationFailed();
//                        Log.e(TAG, "FingerprintManager: 指纹识别失败");
//                    }
//                }, null);
//            }
//             else {
//                Log.d(TAG, "fingerprintTest: 请先采集指纹");
//            }
        }
    }

    /**
     * @return
     */
    public boolean isSatisfactionFingerprint() {
        //permission
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(this, "Please grant authorization for fingerprint identification", Toast.LENGTH_LONG).show();
            return false;
        }
        KeyguardManager mKeyguardManager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE);
        if (!mKeyguardManager.isKeyguardSecure()) {
            Toast.makeText(this, "Please open screen lock", Toast.LENGTH_LONG).show();
            return false;
        }
        return true;
    }
}

这部分写的很简单,仅仅作为参考作用。

注:欢迎扫码关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值