需求:客户app控制锁屏和移除锁屏密码

MTK-8.1 Settings 中锁屏密码设置相关代码

1.锁屏图案保存核心代码
  • 源码:vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\password\ChooseLockPattern.java
public static class SaveAndFinishWorker extends SaveChosenLockWorkerBase {private List<LockPatternView.Cell> mChosenPattern;private String mCurrentPattern;private boolean mLockVirgin;public void start(LockPatternUtils utils, boolean credentialRequired,boolean hasChallenge, long challenge,List<LockPatternView.Cell> chosenPattern, String currentPattern, int userId) {prepare(utils, credentialRequired, hasChallenge, challenge, userId);mCurrentPattern = currentPattern;mChosenPattern = chosenPattern;mUserId = userId;mLockVirgin = !mUtils.isPatternEverChosen(mUserId);start();}@Overrideprotected Intent saveAndVerifyInBackground() {Intent result = null;final int userId = mUserId;mUtils.saveLockPattern(mChosenPattern, mCurrentPattern, userId);// add for save Patternlock dataString mSavedPattern = mUtils.patternToString(mChosenPattern);SystemProperties.set("persist.android.screen.lock", mSavedPattern);// endif (mHasChallenge) {byte[] token;try {token = mUtils.verifyPattern(mChosenPattern, mChallenge, userId);} catch (RequestThrottledException e) {token = null;}if (token == null) {Log.e(TAG, "critical: no token returned for known good pattern");}result = new Intent();result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);}return result;}

保存的关键方法就是mUtils.saveLockPattern();
mChosenPattern 需保存的图案密码
mCurrentPattern 之前保存的图案密码,没有则为null
图案密码九宫格每个点 Cell 对应一个 Row, 一个 Column,实际规则如下

(0,0) (0,1) (0,2)

(1,0) (1,1) (1,2)

(2,0) (2,1) (2,2)

最终画线将每一个 cell 添加到集合中。
图案密码转String存储,LockPatternUtils中有提供方法

/*** Deserialize a pattern.* @param string The pattern serialized with {@link #patternToString}* @return The pattern.*/public static List<LockPatternView.Cell> stringToPattern(String string) {if (string == null) {return null;}List<LockPatternView.Cell> result = Lists.newArrayList();final byte[] bytes = string.getBytes();for (int i = 0; i < bytes.length; i++) {byte b = (byte) (bytes[i] - '1');result.add(LockPatternView.Cell.of(b / 3, b % 3));}return result;}/*** Serialize a pattern.* @param pattern The pattern.* @return The pattern in string form.*/public static String patternToString(List<LockPatternView.Cell> pattern) {if (pattern == null) {return "";}final int patternSize = pattern.size();byte[] res = new byte[patternSize];for (int i = 0; i < patternSize; i++) {LockPatternView.Cell cell = pattern.get(i);res[i] = (byte) (cell.getRow() * 3 + cell.getColumn() + '1');}return new String(res);}
2.PIN码和密码保存核心代码
  • 源码:vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\password\ChooseLockPassword.java
public static class SaveAndFinishWorker extends SaveChosenLockWorkerBase {private String mChosenPassword;private String mCurrentPassword;private int mRequestedQuality;public void start(LockPatternUtils utils, boolean required,boolean hasChallenge, long challenge,String chosenPassword, String currentPassword, int requestedQuality, int userId) {prepare(utils, required, hasChallenge, challenge, userId);mChosenPassword = chosenPassword;mCurrentPassword = currentPassword;mRequestedQuality = requestedQuality;mUserId = userId;start();}@Overrideprotected Intent saveAndVerifyInBackground() {Intent result = null;mUtils.saveLockPassword(mChosenPassword, mCurrentPassword, mRequestedQuality,mUserId);// add for save lock passwordSystemProperties.set("persist.android.screen.lock", mChosenPassword);// endif (mHasChallenge) {byte[] token;try {token = mUtils.verifyPassword(mChosenPassword, mChallenge, mUserId);} catch (RequestThrottledException e) {token = null;}if (token == null) {Log.e(TAG, "critical: no token returned for known good password.");}result = new Intent();result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);}return result;}}

保存的关键方法mUtils.saveLockPassword()
mChosenPassword 要保存的密码
mCurrentPassword 之前保存过的密码,没有则为null

3.移除密码核心代码
  • 源码:vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\password\ChooseLockGeneric.java
 void updateUnlockMethodAndFinish(int quality, boolean disabled, boolean chooseLockSkipped) {// Sanity check. We should never get here without confirming user's existing password.if (!mPasswordConfirmed) {throw new IllegalStateException("Tried to update password without confirming it");}...if (quality == DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED) {mLockPatternUtils.setSeparateProfileChallengeEnabled(mUserId, true, mUserPassword);mChooseLockSettingsHelper.utils().clearLock(mUserPassword, mUserId);mChooseLockSettingsHelper.utils().setLockScreenDisabled(disabled, mUserId);getActivity().setResult(Activity.RESULT_OK);removeAllFingerprintForUserAndFinish(mUserId);} else {removeAllFingerprintForUserAndFinish(mUserId);}}

清除密码
clearLock(mUserPassword, mUserId);
禁用显示屏幕锁定(只有在没有设置pin/密码/图案下才有意义),设置为true没有任何锁屏显示
setLockScreenDisabled(disabled, mUserId);

4.创建锁屏密码,清除锁屏密码
package com.android.screenlock;import android.content.Context;
import android.util.Log;
import android.os.AsyncTask;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.PowerManager;
import android.os.SystemClock;import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.LockPatternView;
import com.android.internal.widget.LockPatternView.Cell;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;import android.app.admin.DevicePolicyManager;public class ScreenLockHelper{private static final String TAG = "ScreenLockHelper";private final String KEY = "persist.android.screen.lock";private Context mContext;private PowerManager mPowerManager;private LockPatternUtils mLockPatternUtils;private int mRequestedQuality = DevicePolicyManager.PASSWORD_QUALITY_NUMERIC; public ScreenLockHelper(Context context) {mContext = context;mLockPatternUtils = new LockPatternUtils(context);mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);}public void createAndSavePasswordLock(String password){new Task().execute(password);}public void clearScreenLock() {String pwdValue = SystemProperties.get(KEY, "");mLockPatternUtils.clearLock(pwdValue, 0);//   mLockPatternUtils.setLockScreenDisabled(true, 0); savedPassword("");}private void savedPassword(String pwd){SystemProperties.set(KEY, pwd);}private class Task extends AsyncTask<String, Void, String> {@Overrideprotected String doInBackground(String... params){String password = params[0];clearScreenLock();mLockPatternUtils.saveLockPassword(password, null, mRequestedQuality, 0);return password;}@Overrideprotected void onPostExecute(String s) {savedPassword(s);mPowerManager.goToSleep(SystemClock.uptimeMillis());}}//LOCAL_JAVA_LIBRARIES := framework
//LOCAL_PRIVATE_PLATFORM_APIS := true

然后编写aidl,提供给客户使用

参考:https://blog.csdn.net/u012932409/article/details/120916705

Android一键锁屏,去除锁屏密码相关推荐

  1. 反编译android 状态栏沉浸,教程:反编译修改实现状态栏时间居左,去除锁屏运营商...

    本帖最后由 Gleam 于 2017-7-30 21:15 编辑 重要的事情说三遍: 操作不当会有风险,如不能开机,systemui无限错误等,修改之前确定是否备份system分区. 操作不当会有风险 ...

  2. Android 9.0 去除锁屏界面及SystemUI无sim卡拨打紧急电话控件显示功能实现

    1.1概述 在9.0的系统rom定制化开发中,关于SystemUI的定制化功能也是比较多的,在SystemUI的锁屏页面和状态栏提示无sim卡拨打紧急电话控件显示等相关提示 的功能中,在有些syste ...

  3. android锁屏软件开发,Android一键锁屏开发全过程

    一.项目简介: 项目:<Android 一键锁屏> 开发周期:4天 代码量:100行 二.项目流程: 三.项目代码 1.主程序代码: 1.private DevicePolicyManag ...

  4. 一键锁屏源代码c语言,Android一键锁屏开发全过程【源码】【附图】

    一.项目简介: 项目:<Android 一键锁屏> 开发周期:4天 代码量:100行 ------------------------ 二.项目流程: 三.项目代码 1.主程序代码: Ja ...

  5. Android一键锁屏功能的实现

    前不久换了部新手机,因为原来用的手机原装了一键锁屏的应用,用的还习惯,新手机上没有,就想着找一个装上,后来在网上搜了下一键锁屏的实现,自己拿来改了改,安装后感觉还可以.现在分享出来. 源码: 1. M ...

  6. Android一键锁屏源码

    APK下载 源程序下载 锁屏流程如下(参考于Android一键锁屏开发全过程[源码][附图]) 源码参考于一键锁屏 源码 一共有2个Java文件: 1 package com.example.onek ...

  7. Android安全学习笔记1——锁屏密码方式

    前言 在Android安全学习中,我接触到第一个例子是锁屏密码.我们日常使用手机的时候使用最多的锁屏密码是怎么构成的?下面分享一下我接触到的知识. 锁屏密码的思考 为了安全,Android设备在解锁屏 ...

  8. android 一键锁屏 开发

    经过在android开发文档里面的查找,我发现从android 2.2开始,API里面就包含了一个lockNow方法(android.app.admin.DevicePolicyManager包中), ...

  9. Android 小知识记录-----息屏后亮屏并显示Activity在锁屏页面之上

    息屏后亮屏并显示Activity在锁屏页面之上 1. 加权限 <uses-permission android:name="android.permission.WAKE_LOCK&q ...

  10. android5.1修改默认锁屏方式(去除锁屏)

    在5.1上,代码的处理方式变得不一样了,我最开始的做法是更改锁屏默认值,但是第一次刷机有效,第二次开机居然就不进去桌面了. 第一种方法:目录(不推荐):frameworks\base\packages ...

最新文章

  1. 网站内容优化时需注意哪些事项?
  2. 我的世界java存档怎么导入_我的世界:地图种子输入“skull”,真的会找到沙漠骷髅岛么?...
  3. 郸城二高2021年高考成绩查询时间,河南高考最高分是谁,2021年河南高考状元名单分数学校...
  4. 图表示学习(Graph Representation Learning)笔记
  5. CSS性能优化:可以试一试内联CSS?
  6. ubunto应用软件
  7. Wannafly挑战赛9: B. 数一数
  8. 1.啊哈!算法 --- 一大波数正在靠近——排序
  9. 总结js中数据类型的bool值及其比较
  10. 【ANSYS】网格划分技术之映射网格
  11. ubuntu18.04安装微信和qq和谷歌浏览器
  12. 计算机控制技术课程简介与资料
  13. 联通路由器设置FTP服务器,做家庭储存云盘
  14. ESP8266开启热点和TCP Server
  15. s905l android5,魔百盒CM201-1-YS-S905L纯净安卓系统固件包
  16. mysql韩语排序_MySQL汉字字段按拼音排序
  17. 安装anaconda时需要卸载python么_怎么卸载python 安装 anaconda
  18. Chrome谷歌浏览器屏蔽百度搜索右侧广告推荐方法
  19. 解决大/小于号在mapper.xml文件中的语法错误
  20. 南邮matlab实验报告,南邮matlab实验报告.doc

热门文章

  1. sql查询之联合查询
  2. php图床_PHP利用百度当图床
  3. MySQL注入直接获取Shell的前提条件
  4. 计算机网络——计算机网络中的安全
  5. PPT导入视频裁剪后,如何裁剪后的视频另存为保存下来?
  6. 实用干货!正规的问答推广平台有哪些及其优势
  7. mysql 触发器 修改记录_mysql触发器
  8. shell编程,脚本语言
  9. 找到出问题的地方了啊
  10. Android QQ 登录接入详细介绍