直播系统代码,Android获取、设置锁屏密码
直播系统代码,Android获取、设置锁屏密码实现的相关代码
说到密码相关的一定要提到LockPatternUtils这个类,它是Android系统中管理锁屏密码的工具类,其中:
设置密码:
1 | <br> class LockPatternUtils{<br> /**<br> * 修改密码<br> *<br> * @param password 原密码,没有设置密码时为null<br> * @param savedPassword 新密码<br> * @param requestedQuality 密码的类型和限制 <br> * DevicePolicyManager.PASSWORD_QUALITY_SOMETHING://图案<br> * DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX://PIN码<br> * DevicePolicyManager.PASSWORD_QUALITY_COMPLEX://密码<br> * @param userHandle 当前的UserID.<br> *<br> */ <br> public void saveLockPassword(String password, String savedPassword, int requestedQuality, int userHandle);<br>} |
实例:
1 | <br> /**<br> * @param password 原密码,没有设置密码时为null<br> * @param savedPassword 新密码<br> *<br> */ <br> private void saveLockPassword(String password, String mUserPassword) {<br> try {<br> LockPatternUtils lockPatternUtils = new LockPatternUtils(this);<br> int userId = ActivityManager.getService().getCurrentUser().id;<br> lockPatternUtils.saveLockPassword(password, mUserPassword, DevicePolicyManager.PASSWORD_QUALITY_COMPLEX, userId);<br> } catch (Exception e) {<br> e.printStackTrace();<br> }<br> } |
关于如何获取原密码,我闹了一个笑话,在发现源码里面的原密码是在几个画面之间用Bundle存起来互相传递的,可是我没有找到系统是以哪一个方法去获取到系统密码的,以正常的逻辑来看,获取原密码的方法也是应该属于LockPatternUtils这个类,但是我就是找不到,又在画面之间传递的Bundle绕晕了,脸怼屏幕看源码卡了我一天。
后面各种查询,才发现Android6.0之后因为安全问题,已经删除了查询到密码的方法…那系统是怎么拿到原密码的呢?
答案其实很简单,进入密码设置画面之前系统会进行密码验证,LockPatternChecker类中提供了验证密码的方法checkPassword,当验证成功时,输入框里的内容就是原密码,再把原密码传递到下一个画面。当时我进入了系统一定有提供获取密码的方法这个怪圈,现在想想真的是好笑,哈哈。
验证密码的方法:LockPatternChecker.checkPassword:
1 | <br> public static AsyncTask<?, ?, ?> checkPassword( final LockPatternUtils utils, final String password, final int userId, final LockPatternChecker.OnCheckCallback callback) {<br> AsyncTask<Void, Void, Boolean> task = new AsyncTask<Void, Void, Boolean>() {<br> private int mThrottleTimeout;<br> protected Boolean doInBackground(Void... args) {<br> try {<br> LockPatternUtils var10000 = utils;<br> String var10001 = password;<br> int var10002 = userId;<br> LockPatternChecker.OnCheckCallback var10003 = callback;<br> Objects.requireNonNull(var10003);<br> return var10000.checkPassword(var10001, var10002, var10003::onEarlyMatched);<br> } catch (RequestThrottledException var3) {<br> this.mThrottleTimeout = var3.getTimeoutMs();<br> return false;<br> }<br> }<br> protected void onPostExecute(Boolean result) {<br> callback.onChecked(result, this.mThrottleTimeout);<br> }<br> protected void onCancelled() {<br> callback.onCancelled();<br> }<br> };<br> task.execute( new Void[0]);<br> return task;<br> } |
使用:
1 | <br> private void checkPassword(String password,LockPatternChecker.OnCheckCallback checkCallback ) {<br> LockPatternChecker.checkPassword(lockPatternUtils, password, userId, checkCallback);<br> } |
以上就是直播系统代码,Android获取、设置锁屏密码实现的相关代码, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现