IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> ***环境复杂度***:指纹识别 -> 正文阅读

[移动开发]***环境复杂度***:指纹识别

一.使用第三方代码

1.第一版

依赖:implementation “androidx.biometric:biometric:1.1.0”

//TODO 1:得到用户指纹
 BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()
                        .setTitle("指纹验证")
                        .setDescription("正在指纹验证中")
                        .setNegativeButtonText("取消")
                        .build();
//TODO 2:校验指纹是否合格
               new BiometricPrompt(this, ContextCompat.getMainExecutor(this), new BiometricPrompt.AuthenticationCallback() {
                   @Override
                   public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
                       super.onAuthenticationError(errorCode, errString);
                   }

                   @Override
                   public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
                       super.onAuthenticationSucceeded(result);
                       //指纹验证成功
                       ARouter.getInstance().build("/huanxin/HaunXinMainActivity").navigation();


                   }

                   @Override
                   public void onAuthenticationFailed() {
                       super.onAuthenticationFailed();
                   }
               })
                       .authenticate(promptInfo);

2.第二版:判断

public class Main6Activity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main6);
        //几个问题
        //TODO 1:判断手机是否支持:安卓6。0以后支持
        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M){
            Toast.makeText(this, "当前手机不支持指纹解锁", Toast.LENGTH_SHORT).show();
            return;
        }
        //TODO 2:判断手机是否有指纹感应区
        FingerprintManager fingerprintManager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);
        if(!fingerprintManager.isHardwareDetected()){
            Toast.makeText(this, "当前手机不支持指纹感应区", Toast.LENGTH_SHORT).show();
            return;
        }
        //TODO 3:判断手机是否录入指纹
        if(!fingerprintManager.hasEnrolledFingerprints()){
            Toast.makeText(this, "当前手机没有录入指纹", Toast.LENGTH_SHORT).show();
            return;
        }

        //指纹解锁
        //TODO 1:弹出窗体,提示用户录入指纹
        BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()
                .setTitle("指纹验证")
                .setNegativeButtonText("取消")
                .build();
        //TODO 2:校验此指纹是否合格
        new BiometricPrompt(this, new BiometricPrompt.AuthenticationCallback() {
            @Override
            public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
                super.onAuthenticationError(errorCode, errString);
                Toast.makeText(Main6Activity.this, "校验失败", Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
                super.onAuthenticationSucceeded(result);
                Toast.makeText(Main6Activity.this, "校验成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAuthenticationFailed() {
                super.onAuthenticationFailed();
            }
        })
                .authenticate(promptInfo);//校验


    }
}

二.原生代码

权限:

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

代码:

package com.bawei.day9day10;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Build;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.security.keystore.KeyGenParameterSpec;
import android.security.keystore.KeyProperties;
import android.util.Log;
import android.widget.Toast;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.cert.CertificateException;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class Main5Activity extends AppCompatActivity {
 private FingerprintManager manager;
 private KeyStore keyStore;
 private static final String DEFAULT_KEY_NAME = "default_key";
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 init();
 }
 private void init() {
 manager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);
 // 判断是否?持指纹
 if (isSupportFingerPrint()) {
 initKey();
 initCipher();
 }
 }
 private boolean isSupportFingerPrint() {
 if (Build.VERSION.SDK_INT >= 23) {
 // 权限判断
 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
 Toast.makeText(this, "没有指纹识别权限", Toast.LENGTH_SHORT).show();
 return false;
 }
 // 硬件判断
 if (!manager.isHardwareDetected()) {
 Toast.makeText(this, "没有指纹识别模块", Toast.LENGTH_SHORT).show();
 return false;
 }
 if (!manager.hasEnrolledFingerprints()) {
 Toast.makeText(this, "您?少需要在系统设置中添加?个指纹", Toast.LENGTH_SHORT).show();
 return false;
 }
 } else {
 Toast.makeText(this, "您的?机暂不?持指纹识别", Toast.LENGTH_SHORT).show();
 return false;
 }
 return true;
 }
 private void initKey() {
 try {
 keyStore = KeyStore.getInstance("AndroidKeyStore");
 keyStore.load(null);
 KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
 KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(DEFAULT_KEY_NAME,
 KeyProperties.PURPOSE_ENCRYPT |
 KeyProperties.PURPOSE_DECRYPT)
 .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
 .setUserAuthenticationRequired(true)
 .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7);
 keyGenerator.init(builder.build());
 keyGenerator.generateKey();
 } catch (Exception e) {
 throw new RuntimeException(e);
 }
 }
 private void initCipher() {
 try {
 SecretKey key = (SecretKey) keyStore.getKey(DEFAULT_KEY_NAME, null);
 Cipher cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/"
 + KeyProperties.BLOCK_MODE_CBC + "/"
 + KeyProperties.ENCRYPTION_PADDING_PKCS7);
 cipher.init(Cipher.ENCRYPT_MODE, key);
 showFingerPrintDialog(cipher);
 } catch (Exception e) {
 throw new RuntimeException(e);
 }
 }
 private void showFingerPrintDialog(Cipher cipher) {
 CancellationSignal cancel = new CancellationSignal();
 manager.authenticate(new FingerprintManager.CryptoObject(cipher), cancel, 0, new FingerprintManager.AuthenticationCallback() {
 @Override
 public void onAuthenticationError(int errorCode, CharSequence errString) {
 }
 @Override
 public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
 }
 @Override
 public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
 Toast.makeText(Main5Activity.this, "ok", Toast.LENGTH_SHORT).show();
 }
 @Override
 public void onAuthenticationFailed() {
 }
 }, null);
 }
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-07 11:18:35  更:2022-05-07 11:19:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 0:38:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码