首页 > 系统 > Android > 正文

Android 指纹功能实例代码

2019-10-22 18:18:21
字体:
来源:转载
供稿:网友

最近在做项目的时候遇到了添加打开app图像解锁的功能,自己嘴欠说现在都用指纹功能,自己给自己挖了一个坑,真是没谁了

从网上看了一些资料,但是给我demo考虑的不是很多,设备支不支持都没考虑,如果支持的话是否添加过指纹也不知道,其实方法都很简单。

废话不多说,贴上工具类和使用方法

package com.tsm.test;import android.annotation.TargetApi;import android.app.Activity;import android.app.KeyguardManager;import android.content.Context;import android.content.Intent;import android.os.Build;import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;import android.support.v4.os.CancellationSignal;/** * Created by tsm on 2017/3/20. * <p/> * 指纹识别功能 * * 如果创建了该类的实例,必须调用  stopsFingerPrintListen 方法 * * 添加权限 * <uses-permission android:name="android.permission.USE_FINGERPRINT" /> * */public class FingerPrintUiHelper extends FingerprintManagerCompat.AuthenticationCallback {  private final FingerPrintCallBack callback;  private CancellationSignal signal;  private FingerprintManagerCompat fingerprintManager;  /**   * 如果失败次数过多,调用系统的startActivityForResult   * 这个是code   */  public static final int REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS = 10;  /**   * 用于提示用户还可以尝试几次,比较友好   */  private int count;  /**   * 控制是否开启过指纹功能   */  public boolean isStartFinger;  /**   * 初始化指纹功能   * @param activity   * @param callback   */  public FingerPrintUiHelper(Activity activity, FingerPrintCallBack callback) {    this.callback = callback;    signal = new CancellationSignal();    fingerprintManager = FingerprintManagerCompat.from(activity);    isStartFinger = false;    if (!fingerprintManager.isHardwareDetected()) {      if (callback != null)        callback.doNotSupportFinger();      return;    }    if (!fingerprintManager.hasEnrolledFingerprints()) {      if (callback != null)        callback.FingerClosed();    }  }  /**   * 开始扫描指纹   */  public void startFingerPrintListen() {    count = 5;    isStartFinger = true;    fingerprintManager.authenticate(null, 0, signal, this, null);  }  /**   * 初始化未必调用 startFingerPrintListen   * 所以添加变量控制   */  public void stopsFingerPrintListen() {    if (isStartFinger) {      if (signal != null && !signal.isCanceled()) {        signal.cancel();      }    }  }  /**   * 识别成功   * @param result   */  @Override  public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {    if (callback != null)      callback.onAuthenticationSucceeded();  }  /**   * 识别失败   */  @Override  public void onAuthenticationFailed() {    count--;    if (count > 0) {      if (callback != null)        callback.onAuthenticationFailed(count);      return;    }  }  /**   * 有错误   * @param errMsgId   * @param errString   */  @Override  public void onAuthenticationError(int errMsgId, CharSequence errString) {    if (errMsgId == 5) {      if (callback != null)        callback.FingerClosed();      return;    }    if (errMsgId == 7) {      if (callback != null)        callback.onAuthenticationError();      return;    }  }  /**   * 多次调用指纹识别失败后,调用此方法   *   * @param activity   */  @TargetApi(Build.VERSION_CODES.LOLLIPOP)  public static void jumpToGesturePassCheck(Activity activity) {    KeyguardManager keyguardManager =        (KeyguardManager) activity.getSystemService(Context.KEYGUARD_SERVICE);    Intent intent =        keyguardManager.createConfirmDeviceCredentialIntent("finger", "测试指纹识别");    activity.startActivityForResult(intent, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);  }  interface FingerPrintCallBack {    /**     * 识别成功     */    void onAuthenticationSucceeded();    /**     * 识别失败     *     * @param count 还可以尝试的次数     * @param count     */    void onAuthenticationFailed(int count);    /**     * 失败次数过多     */    void onAuthenticationError();    /**     * 未开启指纹功能     */    void FingerClosed();    /**     * 不支持指纹功能     */    void doNotSupportFinger();  }}

这个是工具类,下面上使用方法

 

package com.tsm.test;import android.app.Activity;import android.content.Intent;import android.os.Build;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity implements FingerPrintUiHelper.FingerPrintCallBack {  private FingerPrintUiHelper fingerPrintUiHelper;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {////指纹功能是23之后的版本才有的      initFingerPrint();      Button button = (Button) findViewById(R.id.button);      assert button != null;      button.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {          fingerPrintUiHelper.startFingerPrintListen();        }      });      findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {          fingerPrintUiHelper.stopsFingerPrintListen();        }      });    }  }  private void initFingerPrint() {    fingerPrintUiHelper = new FingerPrintUiHelper(this, this);  }  @Override  protected void onActivityResult(int requestCode, int resultCode, Intent data) {    if (requestCode == FingerPrintUiHelper.REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS) {      // Challenge completed, proceed with using cipher      if (resultCode == RESULT_OK) {        Toast.makeText(this, "识别成功", Toast.LENGTH_SHORT).show();//        jumpToMain2Activity();      } else {        Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT).show();      }    }  }  @Override  protected void onDestroy() {    if (fingerPrintUiHelper != null)      fingerPrintUiHelper.stopsFingerPrintListen();    super.onDestroy();  }  /**   * 成功   */  @Override  public void onAuthenticationSucceeded() {    Toast.makeText(this, "识别成功", Toast.LENGTH_SHORT).show();  }  @Override  public void onAuthenticationFailed(int count) {    String msg = "您还可以尝试%d次";    Toast.makeText(this, String.format(msg, count), Toast.LENGTH_SHORT).show();  }  /**   * 验证失败,走密码验证   */  @Override  public void onAuthenticationError() {    FingerPrintUiHelper.jumpToGesturePassCheck(this);  }   /**  * 没有指纹功能  */  @Override  public void FingerClosed() {    //TODO 可以写一个Dialog跳转设置页,这里我就不写了    Toast.makeText(this, "指纹功能已关闭", Toast.LENGTH_SHORT).show();  }  @Override  public void doNotSupportFinger() {  Log.i("info", "-------------doNotSupportFinger--------------------");    Toast.makeText(this, "该设备不支持指纹功能", Toast.LENGTH_SHORT).show();  } }

最后添加权限:

<uses-permission android:name="android.permission.USE_FINGERPRINT" />

总结

以上所示是小编给大家介绍的Android 指纹功能实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表