文档章节

实现一个带有指纹加密功能的笔记本(Android)第二部分

o
 osc_z1hvg4cu
发布于 2018/04/24 19:00
字数 941
阅读 12
收藏 0

精选30+云产品,助力企业轻松上云!>>>

上文基本完成了整个笔记本的笔记功能的实现,接下来记录实现指纹识别加密以及一些小注意事项。

首先判断该手机是否具备指纹识别的硬件功能和用户是否开启指纹识别。

public boolean isFinger() {
        //用来检查是否有指纹识别权限
        if(checkCallingOrSelfPermission(Manifest.permission.USE_FINGERPRINT) ==
                PackageManager.PERMISSION_GRANTED) {
            if (!manager.isHardwareDetected()) {
                Toast.makeText(this, "没有指纹识别模块", Toast.LENGTH_SHORT).show();
                return false;
            }
            if (!mKeyManager.isKeyguardSecure()) {
                Toast.makeText(this, "没有开启锁屏密码", Toast.LENGTH_SHORT).show();
                return false;
            }
            if (!manager.hasEnrolledFingerprints()) {
                Toast.makeText(this, "没有录入指纹", Toast.LENGTH_SHORT).show();
                return false;
            }
        }
        return true;
    }

开始指纹识别

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();
        }
        manager.authenticate(cryptoObject, mCancellationSignal, 0, mSelfCancelled, null);
    }

首先查验用户是否赋予了本软件使用指纹识别的权限,然后进行指纹识别请求。其中authentication方法需要五个参数,如下

    @RequiresPermission(USE_FINGERPRINT)
    public void authenticate(@Nullable CryptoObject crypto, @Nullable CancellationSignal cancel,
            int flags, @NonNull AuthenticationCallback callback, @Nullable Handler handler) {
        authenticate(crypto, cancel, flags, callback, handler, UserHandle.myUserId());
    }

第一个参数是加密对象可以使用对称式和非对称式加密,或者不使用加密直接用null

第二个参数是一个被用来取消认证的对象,直接 new CancellationSignal()就可以。

第三个参数是可选标志,推荐是0

第四个参数是一个接受认证事件的对象

第五个参数是一个可选的回调事件处理器

以下是第四个认证事件的处理,每个结果的处理过程如下

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) {
       //认证成功,可以进入加密文档
noteAdapter.openNote(); } @Override public void onAuthenticationFailed() { Toast.makeText(MainActivity.this, "指纹识别失败", Toast.LENGTH_SHORT).show(); } };

为防止多次验证不成功,但是想通过锁屏密码进行解锁,可以使用

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) {
                noteAdapter.openNote();
            } else {
                Toast.makeText(this, "密码验证失败", Toast.LENGTH_SHORT).show();
            }
        }
    }

这样整个指纹解锁的流程就完成了

下面叙述一下整个项目中需要注意的一些地方

1.关于新建笔记刷新问题,之前是在noteactivity的ondestory的时候存储笔记,在noteadaper的getItemCount中刷新数据库中笔记数量,进行显示。然而回到主页面的时候发现最新建的笔记没有出现在列表上,这是因为activity生命周期的问题,通过log记录下来,发现noteadapter的getItemCount的执行要早于noteactivity的ondestory函数,而晚于onpause函数,所以将storeNote放在onpause中,而不是ondestory。

2.修改笔记则可以直接在mainactivity的onresume函数中写noetAdapter.notifyDataSetChanged就可以了。

2. 新建一个笔记的时候,可能用户只是不小心点击了一下新建笔记,而并不想新增一条,则可以在存储笔记的时候进行个简单判断,内容是否为空。

3. 主页面笔记内容全显示问题,可以设置TextView的以下属性,来显示部分内容即可

android:maxLines="1"
        android:lines="2"
        android:ellipsize="end"

同时,还要注意在加载内容的时候要将加密信息内容隐去,在这里我将加密信息统一显示为“核心机密!!!”.项目代码

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Chrome OS 将支持指纹识别,全民普及的节奏?

国外Chrome Unboxed发现谷歌最新提交的Chromium引擎积极尝试在Chrome OS上引入指纹识别功能,而新的功能可能会出现在即将更新代号为“Kevin”的Chromebook上。 谷歌针对上网本、低成本电脑所...

局长
2016/09/06
3.2K
13
Android中的指纹识别

转载请注明出处:http://blog.csdn.net/wl9739/article/details/52444671 评论中非常多朋友反映,依据我给出的方案,拿不到指纹信息这个问题,在这里统一说明一下。 首先,这篇文章中涉及到的...

jhcelue
2017/08/21
0
0
Android指纹识别API讲解,一种更快更好的用户体验

版权声明:本文出自郭霖的博客,转载必须注明出处。 https://blog.csdn.net/sinyu890807/article/details/81450114 转载请注明出处:https://blog.csdn.net/guolinblog/article/details/8145...

guolin
2018/08/28
0
0
Android 指纹认证

安卓指纹认证使用智能手机触摸传感器对用户进行身份验证。Android Marshmallow(棉花糖)提供了一套API,使用户很容易使用触摸传感器。在Android Marshmallow之前访问触摸传感器的方法不是标...

wuyudong
2016/12/15
0
0
现代化 Android Pie: 安全与隐私

作者: Vikrant Nanda 和 René Mayrhofer, Android 安全与隐私团队 没有什么时候比节假日更适合聊 Android 甜点系统了,毕竟,有谁不喜欢在放假的时候来上一两口甜点呢?那么,大家最喜欢的节...

谷歌开发者
2019/01/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

会议通知 | 2020中国计算与认知神经科学会议

关于大会关于 计算神经科学以神经生物实验为基础,以建立数学模型,开展计算模拟和分析作为基本手段,来刻画和描述大脑的神经活动,探究神经系统各种复杂活动和认知功能包括注意、学习、记忆...

脑机接口社区
06/02
20
0
大神分享快3怎么算下期和值

大神分享快3怎么算下期和值{叩67790572}使用的标签:constructor-arg标签出现的位置:bean标签的内部标签中的属性type:用于指定要注入的数据的数据类型,该数据类型也是构造函数中某个...

yiren081
23分钟前
21
0
Matlab系列之运算符和标点符号的功能介绍

本来月初就打算接着写的,但是电脑不小心进水,主板什么的都废了,周末才找时间拿去修好,心塞。 就不多讲太多废话了,开始分享今天的内容,对MATLAB的运算符做个介绍,然后再对标点符号进行...

狂人V
07/06
9
0
Java源码系列(1):Comparable和Comparator的区别

在讲Comparable和Comparator区别之前,先补充一个知识点。 先看代码: Person类 1public class Person<T> { 2  private T id; 3 4  public T getId() { 5    return i...

学习Java的小姐姐
2018/09/19
25
0
ThreadPoolTaskScheduler手写调度中心

先贴一个自己写的demo把,原理其实就是这样的。 CronTrigger这个类可以将cron表达式转换成Date,可以查看schedule源码学到不少东西,下面代码就是转换成下一执行时间。 public Date nextEx...

朝如青丝暮成雪
44分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部