修改Android 12解锁失败等待时间规则详解

前言
解锁的类型有:Pin码解锁、密码解锁、图案解锁和指纹解锁
修改解锁失败的等待时间:做过相关模块都知道解锁这一块的验证密码等等操作一般是通过JNI通过做的验证操作,数据获取一般也是涉及到C的逻辑 。由于考虑其实系统其他的界面功能上也会有解锁的这几种方式,例如:里面的设置解锁方式那里,因此修改锁屏上的解锁等待时间,要修改到共有接口,因此这个功能的添加,并不是这么简单的去修改的,但是在网上搜索相关修改等待时间的blog,资料比较少,因此在这把修改的步骤记录下来 。
主要需求有以下3点:
1.每次都有5次解锁 。
2.随着尝试次数的增加,时间增长 。
3.关机重启后仍然能计算时间 。(指纹解锁不需要)
1.定位修改的起始点
定位需要修改的地方,尝试使用 获取界面失败了,使用工具,获取如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img--31)(///.png)]
就可以获取某个控件的id,然后锁定布局了,然后就可以找到相关的代码了 。
2.分析整体的修改逻辑
以此类推,因此我们发现要修改的这几种解锁方式主要分为两大类,两大类为:1、PIN码、密码和图案 2、指纹解锁
分为两大类的主要原因是因为指纹解锁的主要逻辑并不在里面而是模块里面,因为在 7.0的代码上和是分开的,12则合到了一起 。
3.具体修改的实现
修改PIN码、密码和图案解锁
通过上面的工具定位代码得知,相关类如下:
如图,其实相关类为、和
这几个就是PIN码、密码和图案对应的自定义View,而其中的点击并操作的逻辑也是在这里面,感觉根据MVC的设计原则,感觉有点不符合这点啊哈哈哈 。。。结果View和Model放到一起了 。
其实为什么PIN码和密码放到一起呢?因为他们有个共同的父类iew.java,关于解锁逻辑的显示控制也在父类里,因此PIN码和密码解锁在这个父类里做操作就可以了 。
com....java其中代码如下:

修改Android 12解锁失败等待时间规则详解

文章插图
new LockPatternChecker.OnCheckCallback() {@Overridepublic void onEarlyMatched() {mLatencyTracker.onActionEnd(ACTION_CHECK_CREDENTIAL);onPasswordChecked(userId, true /* matched */, 0 /* timeoutMs */,true /* isValidPassword */);password.zeroize();}@Overridepublic void onChecked(boolean matched, int timeoutMs) {mLatencyTracker.onActionEnd(ACTION_CHECK_CREDENTIAL_UNLOCKED);mView.setPasswordEntryInputEnabled(true);mPendingLockCheck = null;if (!matched) {onPasswordChecked(userId, false /* matched */, timeoutMs,true /* isValidPassword */);}password.zeroize();}@Overridepublic void onCancelled() {// We already got dismissed with the early matched callback, so we cancelled// the check. However, we still need to note down the latency.mLatencyTracker.onActionEnd(ACTION_CHECK_CREDENTIAL_UNLOCKED);password.zeroize();}}
其实关于锁屏PIN码、密码和图案解锁都是依靠这个.方法去验证密码,然后利用.这个回调来返回验证结果,这个验证结果的回调也是通过JNI一系列步骤完成的 。
先看其中的两个回调方法
1、 这个回调方法是当验证失败的时候才会回调,这里会返回,这里会返回false,这里就是时间间隔 。
2、 这个回调方法是当验证成功的时候才会回调 。
发现问题:
其实刚开始做这个功能的时候并没有考虑做全局的,就想在这里做一个时间的拦截,然后自己把这个时间间隔改了,就能完成需求,其实后来测试并不行,所以这里就牵扯出了发现的几个问题 。
经测试发现,如下问题:
1、系统默认返回都是30×1000