好用解耦的Pin码应用锁

code小生,一个专注 Android 领域的技术分享平台

作者:Allen___

链接:https://www.jianshu.com/p/4da743168e42

声明:本文是 Allen___ 原创投稿,转载等请联系作者获得授权。

起因

各位小伙伴,开发中肯定会有应用锁的需求。手势锁也好、pin码锁也罢,亦或是指纹锁。不管哪一类,它们的基本逻辑都是差不多的,我这边以pin码锁为基础介绍实现方案,大家可根据需要拓展。

介绍

一:关于pin码锁这块,我做了两种基本样式,大家可以在此基础上修改。

二:里面有添加pin码、确认pin码、验证pin码、删除pin码四种动作。

三:同时,这边不仅实现了锁屏的需求,而且拓展了输入错误的次数统计处理。如果,错误超过3次(大家可修改次数),则会进入倒计时锁定状态(锁定时长可修改),期间无法进行输入验证。

四:错误次数、锁定状态,我这边做了状态保留,不管你是进入后台亦或杀掉应用重新启动。我这边都会恢复上次的状态。

效果

两种样式

circleStyle.png

borderStyle.png

流程(添加、确认、验证、删除)

progress.gif

锁定状态(超过一定错误次数)

status.gif

实现

关于启动页(刚打开蓝色页面为启动页),可参考我之前博客:https://www.jianshu.com/p/e18412b0977f

关于pin码样式(自定义输入框和自定义数字键盘),可参考我之前博客:

https://www.jianshu.com/p/d2c6e6e59335

首先说明主题逻辑。

一:我们要判断应用是启动以及从后台进入前台。这个时候我们需要考虑pin码是否设置。

二:如果设置,则打开pin码Activity,并传递指定意图参数。意图参数分为四类:添加、确认(类似重复输入密码)、验证和删除。此时,应该传入验证。

三:由于应用启动后需要进入首页,所以我们需要追加意图参数,指定打开首页。如果是从后台进入前台,则认证完毕直接finish即可。无需打开任何页面,此时无需追加意图参数。在pinActivity认证完毕后,会根据参数处理不同逻辑。

三:对于pin码的添加:添加pin码时候指定意图类型为添加,然后打开。当输入完毕后,会启动新的pinActivity并指定意图参数为确认。此时,需要将添加页面参数传递过来,进行确认的一致匹配。

四:添加以及确认完毕之后,pin参数会被存储到本地,对于应用启动和进入前台则是根据该数据进行验证。

五:如果需要删除Pin码、则直接打开pinActivity并传递意图参数值为删除类型,当验证成功后,pin码本地数据会被清空。

六:对于pin码的验证,我代码逻辑里面添加了错误次数以及锁定事件。当错误超过指定次数则进入锁定状态,在锁定时间无法进行输入操作。当锁定时间用尽则会重置为可输入状态。

七:对于错误次数和锁定状态处理,代码添加了本地存储,为了保证用户杀掉app重新启动后逻辑依旧保留。对于这些数据,我是在生命周期的onResume、onPause进行的本地数据获取以及保存。同时,锁定时间,我采用的是倒计时器对象,及时刷新时间值,当倒计时结束则恢复可输入状态。倒计时处理在onResume、onPause方法做了刷新调整。如果onResume时候已经超过锁定时间,则直接恢复状态,无需再次刷新执行倒计时。

下面介绍重点代码。

应用启动

应用从后台进入前台

pinUtil介绍(pinActivity中大量使用,先介绍)

pinActiviy介绍

以上是所有相关逻辑,非重点代码不再啰嗦。

总结

开发中免不了用到各种锁屏,无论是pin码也好,其他也罢,希望上面的意图逻辑能帮助到大家,谢谢~

地址:https://github.com/HoldMyOwn/PinLock

键盘相关

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180530G087ZR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券