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
键盘相关
领取专属 10元无门槛券
私享最新 技术干货