Android 指纹识别

Android 指纹识别的基本介绍

近期项目中有指纹识别的需求,没接触过,查阅API发现指纹识别是从Android 6.0新增的,也就是必须API版本至少要23以上,要通过指纹扫描验证用户身份,请获取新 FingerprintManager 类的实例,并调用 authenticate()方法。您的应用必须运行在带有指纹传感器的兼容设备上。您必须在应用中实现指纹身份验证流的用户界面,并在 UI 中使用标准 Android 指纹图标。

1.使用时必须首先判断API版本,先得到系统的API版本:

minSdkVersion= Build.VERSION.SDK;  

2.判断设备是否支持指纹权限:

manager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);  
keyManager= (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);  
//硬件设备是否支持指纹解锁功能  
        if (!manager.isHardwareDetected()) {  
            Toast.makeText(getBaseContext(), "该手机不支持指纹解锁", Toast.LENGTH_SHORT).show();  
            return false;  
        }  


3.还有就是权限,这个也是6.0之后新增的权限:

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

4.接下来就是指纹识别了:
主要就是 FingerprintManager.AuthenticationCallback的几个回调:
 onAuthenticateSuccess();
 onAuthenticateFailed();
 onAuthenticateError();

manger.authenticate(cryptoObject, mCancellationSignal, 0, mAuthCallback, null);
这里的四个参数分别是:
  1. 第一个参数是一个加密对象。这里的 CryptoObject 对象就是使用 Cipher 对象创建创建出来的:new FingerprintManager.CryptoObject(cipher)。
  2. 第二个参数是一个 CancellationSignal 对象,该对象提供了取消操作的能力。创建该对象也很简单,使用 new CancellationSignal() 就可以了。
  3. 第三个参数是一个标志,默认为0。
  4. 第四个参数是 AuthenticationCallback 对象,它本身是 FingerprintManager 类里面的一个抽象类。该类提供了指纹识别的几个回调方法,包括指纹识别成功、失败等。需要我们重写。
  5. 最后一个 Handler,可以用于处理回调事件,可以传null。

直接贴代码,大家参考一下:
import android.Manifest;  
import android.app.KeyguardManager;  
import android.content.Context;  
import android.content.Intent;  
import android.content.pm.PackageManager;  
import android.hardware.fingerprint.FingerprintManager;  
import android.os.Bundle;  
import android.os.CancellationSignal;  
import android.support.v4.app.ActivityCompat;  
import android.support.v4.app.FragmentActivity;  
import android.util.Log;  
import android.view.View;  
import android.widget.Button;  
import android.widget.Toast;  
  
  
  
public class MainActivity extends FragmentActivity {  
    FingerprintManager manager;  
    KeyguardManager mKeyManager;  
    private final static int REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS = 0;  
    private final static String TAG = "finger_log";  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        manager = (FingerprintManager) this.getSystemService(Context.FINGERPRINT_SERVICE);  
        mKeyManager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE);  
        Button btn_finger = (Button) findViewById(R.id.btn_activity_main_finger);  
        btn_finger.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                if (isFinger()) {  
                    Toast.makeText(MainActivity.this, "请进行指纹识别", Toast.LENGTH_LONG).show();  
                    Log(TAG, "keyi");  
                    startListening(null);  
                }  
            }  
        });  
  
    }  
  
    public boolean isFinger() {  
  
        //android studio 上,没有这个会报错  
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {  
            Toast.makeText(this, "没有指纹识别权限", Toast.LENGTH_SHORT).show();  
            return false;  
        }  
        Log(TAG, "有指纹权限");  
        //判断硬件是否支持指纹识别  
        if (!manager.isHardwareDetected()) {  
            Toast.makeText(this, "没有指纹识别模块", Toast.LENGTH_SHORT).show();  
            return false;  
        }  
     Log(TAG, "有指纹模块");  
        //判断 是否开启锁屏密码  
  
        if (!mKeyManager.isKeyguardSecure()) {  
            Toast.makeText(this, "没有开启锁屏密码", Toast.LENGTH_SHORT).show();  
            return false;  
        }  
        Log(TAG, "已开启锁屏密码");  
        //判断是否有指纹录入  
        if (!manager.hasEnrolledFingerprints()) {  
            Toast.makeText(this, "没有录入指纹", Toast.LENGTH_SHORT).show();  
            return false;  
        }  
       Log(TAG, "已录入指纹");  
  
        return true;  
    }  
  
    CancellationSignal mCancellationSignal = new CancellationSignal();  
    //回调方法  
    FingerprintManager.AuthenticationCallback mSelfCancelled = new FingerprintManager.AuthenticationCallback() {  
        @Override  
        public void onAuthenticationError(int errorCode, CharSequence errString) {  
            //但多次指纹密码验证错误后,进入此方法;并且,不能短时间内调用指纹验证  
            Toast.makeText(MainActivity.this, errString, Toast.LENGTH_SHORT).show();  
            showAuthenticationScreen();  
        }  
  
        @Override  
        public void onAuthenticationHelp(int helpCode, CharSequence helpString) {  
  
            Toast.makeText(MainActivity.this, helpString, Toast.LENGTH_SHORT).show();  
        }  
  
        @Override  
        public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {  
  
            Toast.makeText(MainActivity.this, "指纹识别成功", Toast.LENGTH_SHORT).show();  
        }  
  
        @Override  
        public void onAuthenticationFailed() {  
            Toast.makeText(MainActivity.this, "指纹识别失败", Toast.LENGTH_SHORT).show();  
        }  
    };  
  
  
    public void startListening(FingerprintManager.CryptoObject cryptoObject) {  
        //android studio 上,没有这个会报错  
        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);  
  
  
    }  
  
    /**  
     * 锁屏密码  
     */  
    private void showAuthenticationScreen() {  
  
        Intent intent = mKeyManager.createConfirmDeviceCredentialIntent("finger", "测试指纹识别");  
        if (intent != null) {  
            startActivityForResult(intent, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);  
        }  
    }  
  
    @Override  
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS) {  
            // Challenge completed, proceed with using cipher  
            if (resultCode == RESULT_OK) {  
                Toast.makeText(this, "识别成功", Toast.LENGTH_SHORT).show();  
            } else {  
                Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT).show();  
            }  
        }  
    }  
  
    private void Log(String tag, String msg) {  
        Log.d(tag, msg);  
    }  
}  




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android指纹识别开发可以使用Android操作系统提供的Fingerprint API来实现。开发者可以在应用中使用这些API来构建指纹识别功能,包括指纹认证和指纹验证。使用这些API还可以创建自定义指纹认证界面。 ### 回答2: Android指纹识别开发是指在Android应用中集成和利用设备的指纹识别功能。指纹识别作为一种生物识别技术,已经得到广泛应用,可以用于增加安全性和方便性,特别是在支付、解锁和身份验证等方面。 要进行Android指纹识别开发,首先需要了解Android系统对于指纹识别的支持。从Android 6.0(API Level 23)开始,Android提供了一套指纹API,开发者可以使用该API与设备上的指纹传感器进行交互。指纹API提供了用于管理指纹硬件和进行指纹验证的功能。 在开发过程中,首先需要在AndroidManifest.xml文件中声明指纹识别的权限。接下来,可以使用FingerprintManager类来管理和操作指纹传感器。可以通过调用authenticate()方法进行指纹验证,并在验证结果回调中获取验证结果。 除了指纹验证之外,还可以在应用中利用指纹识别功能进行更高级的操作。例如,可以使用FingerprintManager类的hasEnrolledFingerprints()方法来判断设备上是否已经注册了指纹,以此决定是否显示指纹识别相关的功能。 为了提供更好的用户体验,可以使用BiometricPrompt类来构建更友好的指纹识别界面。BiometricPrompt类提供了标准化的指纹识别对话框,可以自动适配设备的指纹传感器,并提供一致的用户界面和交互方式。 总而言之,Android指纹识别开发为应用提供了更高级别的安全性和身份验证方式。开发者可以通过使用指纹API和相关类来集成和利用设备上的指纹识别功能,增加应用的安全性和便利性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值