当前位置: 首页 > news >正文

Android13重置锁屏(2)

        锁屏凭证包括图案、PIN、密码,系统开机默认无锁屏,重置锁屏的想法是在每次设置新锁屏凭证成功后,保存新锁屏凭证到文件,当再次设置时,用保存的锁屏凭证作为验证。

        回到LockSettingsService的setLockCredential方法,代码最后增加代码:

 @Overridepublic boolean setLockCredential(LockscreenCredential credential,LockscreenCredential savedCredential, int userId) {........................................final long identity = Binder.clearCallingIdentity();try {...............................notifySeparateProfileChallengeChanged(userId);onPostPasswordChanged(credential, userId);scheduleGc();//add codeSettings.Global.putString(mContext.getContentResolver(),"lockscreen_password", byteToHexString(credential.getCredential()));//add endreturn true;} finally {Binder.restoreCallingIdentity(identity);}}private String byteToHexString(byte [] byteHex){String strHex="";if(byteHex==null)return "";for(int i=0;i<byteHex.length;i++){strHex=strHex+String.format("%02X", byteHex[i]);}return strHex;}

将凭证的byte数组转成HEX码,保存到Settings,通过系统设置修改的锁屏凭证也会经过这里保存。

在定制化system service里面增加一个setPassword方法:

 @Overridepublic boolean setPassword(String pwd) throws RemoteException {long id = Binder.clearCallingIdentity();mContext.enforceCallingOrSelfPermission(Manifest.permission.ACCESS_KEYGUARD_SECURE_STORAGE,"YourService");mContext.enforceCallingOrSelfPermission(Manifest.permission.SET_AND_VERIFY_LOCKSCREEN_CREDENTIALS,"YourService");mContext.enforceCallingOrSelfPermission(Manifest.permission.SET_INITIAL_LOCK,YourService");LockPatternUtils lockPatternUtils = new LockPatternUtils(mContext); LockscreenCredential newCredential;String savePwd=Settings.Global.getString(mContext.getContentResolver(),"lockscreen_password");      int type=lockPatternUtils.getCredentialTypeForUser(UserHandle.USER_SYSTEM);    newCredential = LockscreenCredential.createPasswordOrNone(pwd);boolean iset=false;byte data[]= hexStringToByte(savePwd);switch (type){case LockPatternUtils.CREDENTIAL_TYPE_NONE:iset=lockPatternUtils.setLockCredential(newCredential,LockscreenCredential.createNone(), UserHandle.USER_SYSTEM);break;case LockPatternUtils.CREDENTIAL_TYPE_PATTERN:iset=lockPatternUtils.setLockCredential(newCredential,LockscreenCredential.createPattern(LockPatternUtils.byteArrayToPattern(data)), UserHandle.USER_SYSTEM);break;case LockPatternUtils.CREDENTIAL_TYPE_PIN:iset=lockPatternUtils.setLockCredential(newCredential,LockscreenCredential.createPinOrNone(new String(data)), UserHandle.USER_SYSTEM);break;case LockPatternUtils.CREDENTIAL_TYPE_PASSWORD:iset=lockPatternUtils.setLockCredential(newCredential,LockscreenCredential.createPasswordOrNone(new String(data)), UserHandle.USER_SYSTEM);break;default:break;}       Binder.restoreCallingIdentity(id);return iset;}private byte[] hexStringToByte(String str) {if(str==null) return null;if(str.length()%2!=0) str="0"+str;int len = (str.length()/2);byte[] result = new byte[len];char[] achar = str.toCharArray();for (int i = 0; i < len; i++) {int pos = i * 2;result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));}return result;}private byte toByte(char c) {byte b = (byte) "0123456789ABCDEF".indexOf(c);if(b==-1)b = (byte) "0123456789abcdef".indexOf(c);return b;}

代码从保存的锁屏凭证获取值,并根据当前的锁屏方式,创建还原保存的锁屏作为验证,同时创建一个新的以pwd为密码的锁屏凭证,通过lockPatternUtils.setLockCredential设置。

http://www.dtcms.com/a/294242.html

相关文章:

  • 论文略读:Knowledge is a Region in Weight Space for Finetuned Language Models
  • springboot集成LangChain4j
  • 世博会无法在Android上启动项目:无法连接到TCP端口5554:连接被拒绝
  • 2025暑期—05神经网络-BP网络
  • PyCharm配置python软件安装步骤(附安装包)PyCharm 2025 超详细下载安装教程
  • 【CNN】LeNet网络架构
  • 盟接之桥说制造:浅谈“客供共生关系”:构建能力闭环,实现价值共赢
  • 论文笔记:On the Biology of a Large Language Model
  • Java 高频算法
  • Python通关秘籍(七)数据结构——集合
  • mysql什么时候用char,varchar,text,longtext
  • Git 完全手册:从入门到团队协作实战(4)
  • 经典神经网络之LetNet
  • 【前沿技术动态】【AI总结】RustFS:从 0 到 1 打造下一代分布式对象存储
  • Java 时间处理 API 全解析:从 JDK7 到 JDK8 的演进
  • 有序数组中出现次数超过25%的元素
  • 数字人形象视频:开启虚拟世界的全新篇章
  • Linux 723 磁盘配额 限制用户写入 quota;snap快照原理
  • IRF 真机实验
  • [AI8051U入门第八步]硬件IIC驱动AHT10温湿度传感器
  • 密码学中的概率论与统计学:从频率分析到现代密码攻击
  • 【Kubernetes】集群启动nginx,观察端口映射,work节点使用kubectl配置
  • scikit-learn 包
  • 【后端】 FastAPI
  • AI替代人工:浪潮中的沉浮与觉醒
  • LNMP-zblog分布式部署
  • 前端/后端,前台/中台/后台概念区别
  • kafka 消费者组
  • RLVR的一种扩展方案--RLPR论文阅读
  • 负压产生电路分析