Android生物识别 指纹识别面部识别,生物认证Biometric的简单使用

2023-05-16

Android生物识别 指纹识别面部识别,生物认证Biometric的简单使用

生物认证Biometric
很多APP都要求免登录,银行什么的,要求指纹登录,密码登录,再不就是手势登录。
Biometric是谷歌官方提供的生物识别验证类库,能调用包括目前Android设备上搭载的指纹、人脸、虹膜等系统级的生物认证。(目前大多数的国内定制ROM可能因为安全问题,仅支持指纹)
当然,我测试了一下,一般的手机只能指纹登录。

这是因为Android10系统才开放面部识别

所以你的手机就算有面部解锁功能,调用这个Biometric库还是会调出指纹解锁。

还有一些手机即使是Android10也无法调用面部解锁,可能与厂商是否开放面部解锁功能有关。依赖

dependencies {
        implementation 'androidx.biometric:biometric:1.0.0-beta01'
    }


主布巨代码

public class MainActivity extends AppCompatActivity {
    private Handler handler = new Handler();

    private Executor executor = new Executor() {
        @Override
        public void execute(Runnable command) {
            handler.post(command);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button biometricLoginButton = findViewById(R.id.biometric_login);

        BiometricManager biometricManager = BiometricManager.from(this);
        switch (biometricManager.canAuthenticate()) {
            case BiometricManager.BIOMETRIC_SUCCESS:
                Toast.makeText(this, "应用可以进行生物识别技术进行身份验证", Toast.LENGTH_SHORT).show();

                biometricLoginButton.setOnClickListener(view -> showBiometricPrompt());


                break;
            case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE:
                Toast.makeText(this, "该设备上没有搭载可用的生物特征功能", Toast.LENGTH_SHORT).show();
                break;
            case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE:
                Toast.makeText(this, "生物识别功能当前不可用", Toast.LENGTH_SHORT).show();
                break;
            case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED:
                Toast.makeText(this, "用户没有录入生物识别数据", Toast.LENGTH_SHORT).show();
                break;
        }

    }

   //生物认证的setting
    private void showBiometricPrompt() {
        BiometricPrompt.PromptInfo promptInfo =
                new BiometricPrompt.PromptInfo.Builder()
                        .setTitle("Biometric login for my app") //设置大标题
                        .setSubtitle("Log in using your biometric credential") // 设置标题下的提示
                        .setNegativeButtonText("Cancel") //设置取消按钮
                        .build();

        //需要提供的参数callback
        BiometricPrompt biometricPrompt = new BiometricPrompt(MainActivity.this,
                executor, new BiometricPrompt.AuthenticationCallback() {
            //各种异常的回调
            @Override
            public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {
                super.onAuthenticationError(errorCode, errString);
                Toast.makeText(getApplicationContext(),
                        "Authentication error: " + errString, Toast.LENGTH_SHORT)
                        .show();
            }

            //认证成功的回调
            @Override
            public void onAuthenticationSucceeded(
                    @NonNull BiometricPrompt.AuthenticationResult result) {
                super.onAuthenticationSucceeded(result);
                BiometricPrompt.CryptoObject authenticatedCryptoObject =
                        result.getCryptoObject();
                // User has verified the signature, cipher, or message
                // authentication code (MAC) associated with the crypto object,
                // so you can use it in your app's crypto-driven workflows.
            }

            //认证失败的回调
            @Override
            public void onAuthenticationFailed() {
                super.onAuthenticationFailed();
                Toast.makeText(getApplicationContext(), "Authentication failed",
                        Toast.LENGTH_SHORT)
                        .show();
            }
        });

        // 显示认证对话框
        biometricPrompt.authenticate(promptInfo);
    }
}



这样一个简单的生物识别就ok了

效果图不方便贴,反正我手机只能调出指纹登录
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android生物识别 指纹识别面部识别,生物认证Biometric的简单使用 的相关文章

  • Java语法之 Lambda表达式使用

    一 xff0c Lambda表达式背景 Lambda表达式是Java SE 8中一个重要的新特性 lambda表达式允许你通过表达式来代替功能接口 lambda表达式就和方法一样 它提供了一个正常的参数列表和一个使用这些参数的主体 body
  • Java8之Stream使用和时间处理

    java8 stream api流式编程 https www cnblogs com haixiang p 14291626 html java8 时间处理 https www cnblogs com haixiang p 12993399
  • redisTemplate分布式锁演变

    redisTemplate分布式锁演变 redission分布式锁实现 xff01 https blog csdn net xiaoxiaole0313 article details 118741039
  • 截图工具使用方式

    1 xff0c 鼠标右击创建一个文本文件 2 xff0c 重命名文件为 bat格式 3 右击选择编辑 xff0c 保存 4 双击文件打开 5 xff0c 点击模式可以选择截图类型
  • JVM优化相关命令

    一 性能调优 性能调优包含多个层次 xff0c 比如 xff1a 架构调优 代码调优 JVM调优 数据库调优 操作系统调优等等 架构调优和代码调优是JVM调优的基础 xff0c 其中架构调优是对系统影响最大的 二 何时进行JVM调优 遇到以
  • Java多线程

    一 xff0c 单 CPU 如何同时运行多个程序 假设我们同时开了多个程序 xff1a Word xff0c IE xff0c QQ xff0c Winamp xff0c 对于操作系统来说 xff0c 这意味着 有四个进程要同时运行 为了解
  • BW性能监控利器——ST13总结

    题记 xff1a BW 的小工具 xff0c ST13 xff0c 近来每每使用 xff0c 都颇有感慨 xff0c 故总结如下 xff0c 以备后用 1 Process Chain xff1a ST13 gt BW TOOLS gt Pr
  • IO字节流与字符流

    一 xff0c 字节流 1 xff0c InputStream OutputStream 下所有字节流的父类 xff0c 也就是在装饰模式中扮演 武器 这个角色的类 所有输入字节流的父类是 InputStream xff0c 所有输出字节流
  • CentOS7.6镜像下载

    一 xff0c 直接下载 https mirrors aliyun com centos vault 7 6 1810 isos x86 64 二 xff0c 官网下载 https www centos org download
  • Nginx支持quic协议及gcc版本升级

    第一种方式 xff1a Nginx官方nginx quic搭建 通过部署Nginx官方的QUIC分支来实现的浏览器和nginx quic服务器粗略的HTTP3通信 1 下载BoringSSL BoringSSL 是由谷歌开发 从 OpenS
  • Nginx添加自定义HTTP头字段

    nginx代码配置 以下配置的是https类型的监听器 xff0c 添加了多个proxy set header nginx常用变量https zhuanlan zhihu com p 619398840 在后端server节点上使用tcpd
  • Mybatis 和 Mybatis Plus 的区别

    Mybatis Plus Mybatis Plus是一个Mybatis的增强工具 xff0c 只是在Mybatis的基础上做了增强却不做改变 xff0c MyBatis Plus支持所有Mybatis原生的特性 xff0c 所以引入Myba
  • linux下备份一个目录下所有文件及目录

    一 关于Linux备份文件和应用的几个命令 xff1a tar和cp 在工作中 xff0c 经常来备份文件和系统应用 xff0c 常用到的主要是tar和cp命令 xff0c 分别介绍如下 xff1a 一 tar命令 xff0c 这个现在经常
  • linux服务器IO性能诊断

    1 在 Linux 服务器排查问题时 xff0c 一般会通过 top vmstat free netstat df h 等命令排查 CPU 内存 网络和磁盘等问题 有的时候我们需要更进一步了解磁盘 I O 的使用情况 基本命令 xff1a
  • 记 Ubuntu 19.04更改ip地址

    前言 从ubuntu从17 10开始 xff0c 已经不再在 etc network interfaces里配置IP xff0c 即使配置了也不会生效 xff0c 而是改成netplan方式 xff0c 配置写在 etc netplan 文
  • 批量安装centos7服务器

    利用PXE自动化安装centos7 前言 PXE的功能及原理 大概解释一下意思就是 xff1a 启动计算机的时候如果没有插入U盘以及光驱等介质的话 xff0c boot启动项是有一个从PXE启动的选项 xff0c 如果都没有则会从pxe启动
  • KairosDB 1.13安装手记

    PS xff1a 为了处理监控数据 xff0c 我们需要一个时间序列数据库 xff0c OpenTSDB是前驱 xff0c 但是是基于Hbase实现的 xff0c 后来有了一个基于Cassandra的实现 xff0c 就是KairosDB
  • Ubuntu 18.04 配置网卡聚合绑定与桥接

    Ubuntu 18 04 配置网卡聚合绑定与桥接 单网卡配置ip和多网卡配置ip 在之前的博客已经写过了 xff0c 这里写一下进阶的一些配置吧 Ubuntu 配置ip博客 xff1a https blog csdn net liuhaoy
  • ansible playbook 检查文件是否存在

    register 在ansible的playbook中task之间的相互传递变量 当我们需要判断对执行了某个操作或者某个命令后 xff0c 如何做相应的响应处理 xff08 执行其他 ansible 语句 xff09 xff0c 则一般会用
  • Ubuntu打开虚拟机报错could not open /dev/vmmon:?????? please make sure that the kernel moduel vmmon is load

    首先查看模块是否启动 etc init d vmware status 如果未启动使用start启动 etc init d vmware start 检查模块是否启动成功 etc init d vmware status 如果是网卡那一项f

随机推荐