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

android10 系统定制:增加应用锁功能

实现效果如下,上锁应用在桌面或最近任务打开弹出解锁界面,需要解锁成功才能打开应用。解锁界面可点击返回或Home键关闭,非上锁应用可直接打开。
在这里插入图片描述

基本思路:拦截系统应用启动,判断应用是否在锁住状态,弹出解锁Window。解锁完成后再正常启动应用。分为从桌面启动和最近任务启动两种情况。
1.资源的添加
在这里插入图片描述
在frameworks/base/core/res下增加了我的资源目录jia_res,添加了解锁界面用到的资源文件,文件目录如图。
需要在frameworks/base/core/res/Android.bp中添加引用:

android_app {...resource_dirs: ["res","jia_res"],...
}

另外新增的资源需要在symbols.xml或pubulic.xml声明,例如:

<resources><java-symbol type="layout" name="window_unmber_unlock_app" /><java-symbol type="id" name="appNumberLogoImg" /><java-symbol type="id" name="appNumberNameText" /><java-symbol type="id" name="subTitleNumber" /><java-symbol type="id" name="pswNumberPointView" /><java-symbol type="id" name="errorNumberTipsText" /><java-symbol type="id" name="numberKeyView" /><java-symbol type="string" name="lock_app_number_subtitle" /><java-symbol type="string" name="lock_app_number_error_tip" /><java-symbol type="drawable" name="ic_lock_delete" /><java-symbol type="drawable" name="selector_keyboard_number" />...
</resources>

2.拦截从桌面启动
之前分析过Activity启动流程 ,无论冷启动还是热启动都会先走ActivityStarter的startActivityMayWait方法,因此在此方法进行拦截:

private int startActivityMayWait( ...){...// Collect information about the target of the Intent.ActivityInfo aInfo = mSupervisor.resolveActivity(intent, rInfo, startFlags, profilerInfo);if (AppLockManager.isAppLocked(aInfo.packageName)) {IApplicationThread caller1 = caller;int callingUid1 = callingUid;Intent intent1 = intent;String resolvedType1 = resolvedType;AppLockManager.ShowLockWindow(mService.mContext,aInfo.packageName, new Runnable() {@Overridepublic void run() {startActivityMayWait(caller1, callingUid1,callingPackage, requestRealCallingPid, requestRealCallingUid,intent1, resolvedType1, voiceSession,voiceInteractor, resultTo, resultWho, requestCode,startFlags, profilerInfo, outResult,globalConfig, options, ignoreTargetSecurity,userId, inTask, reason,

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • DS1302实时时钟(51单片机)
  • Flink cdc正确打开方式(flink on yarn)
  • Kotlin 和 Java区别
  • Netty学习笔记01--出入站处理器顺序
  • 学习记录702@计算机组成原理之计算机硬件组成细化
  • FFmpeg源码:av_packet_move_ref、av_packet_make_refcounted函数分析
  • C语言典型例题32
  • ElementUI修改主题色
  • 【Pytorch】topk函数
  • Postgresql导入矢量数据
  • LVS详细配置
  • javacpp使用入门
  • Python爬虫(8)
  • MySQL --- 用户管理
  • C语言 | Leetcode C语言题解之第327题区间和的个数
  • 5、React组件事件详解
  • CSS实用技巧
  • FastReport在线报表设计器工作原理
  • JavaScript异步流程控制的前世今生
  • JS学习笔记——闭包
  • Linux后台研发超实用命令总结
  • Node + FFmpeg 实现Canvas动画导出视频
  • node和express搭建代理服务器(源码)
  • Rancher如何对接Ceph-RBD块存储
  • REST架构的思考
  • Shadow DOM 内部构造及如何构建独立组件
  • Unix命令
  • Vue 动态创建 component
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • - 概述 - 《设计模式(极简c++版)》
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 排序算法学习笔记
  • 小程序开发之路(一)
  • puppet连载22:define用法
  • 国内开源镜像站点
  • ​如何使用QGIS制作三维建筑
  • ######## golang各章节终篇索引 ########
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (办公)springboot配置aop处理请求.
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net 调用海康SDK以及常见的坑解释
  • .NET 快速重构概要1
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • @基于大模型的旅游路线推荐方案
  • [ SNOI 2013 ] Quare
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现