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

系统开发之禁止卸载应用名单

本文目的主要是记录自己系统(Android7.1系统)开发实现代码,以便后期通用的功能可以直接使用,不需要再去通过搜索然后筛选再验证的繁琐流程,大大减小自己的开发时间。

        我实现思路是在系统内新增自己的数据库用来记录禁止卸载应用名单开关状态以及禁止卸载应用名单列表。为了使系统兼容性更强APP实现难度更低,采用的是通过自定义广播来实现,通过广播进行开关控制以及名单数据传输。

1、在rk3288\frameworks\base\core\java\com\android\server目录下的BootReceiver内新增自定义广播:

 private static final String Uninstall = "android.intent.action.HUALI_TABLE_UNINSTALL"; //新增禁止卸载应用名单private static final String Uninstall2 = "android.intent.action.HUALI_TABLE_UNINSTALL_DELETE"; //删除禁止卸载应用名单
private static final String UninstallStatus = "android.intent.action.HUALI_TABLE_UNINSTALL_STATUS"; // 禁止卸载应用名单状态

2、修改禁止卸载应用名单状态以及列表数据的新增和删除;

 String action = intent.getAction();HLDatabaseHelper dbHelper = new HLDatabaseHelper(context);if (dbHelper.getListStatusDataSize() == 0) { //初始化名单状态表dbHelper.initListStatusData();
}if (action.equals(Uninstall)) {ArrayList<String> whiteList = intent.getStringArrayListExtra("uninstallList");int type = intent.getIntExtra("dataListType", 1);for (String packageName : whiteList) {Log.d(TAG, "新增禁止卸载名单包名:" + packageName + "  类型:" + type);dbHelper.addUninstallData(packageName, type);}
} else if (action.equals(Uninstall2)) {String packageName = intent.getStringExtra("uninstallDelete");Log.d(TAG, "删除禁止卸载名单包名:" + packageName);dbHelper.deleteUninstallData(packageName);
}else if (action.equals(UninstallStatus)) {boolean status = intent.getBooleanExtra("uninstallStatus", false);Log.d(TAG, "接收到更新禁止卸载名单状态通知:" + status);dbHelper.updateData(2, status);
}

3、在 rk3288\frameworks\base\services\core\java\com\android\server\pm\PackageManagerService.java 中实现卸载拦截功能

private int deletePackageX(String packageName, int userId, int deleteFlags) {
......
if (isPackageDeviceAdmin(packageName, removeUser)) {Slog.w(TAG, "Not removing package " + packageName + ": has active device admin");return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER;}//  add for uninstaller black list startif (isOpenUnInstaller()) {if (isUnInstallerEnable(packageName)) {return PackageManager.DELETE_FAILED_INTERNAL_ERROR;}}//  add for uninstaller black list endPackageSetting uninstalledPs = null;......
}//  add for uninstaller black list startprivate boolean isUnInstallerEnable(String packagename) {HLDatabaseHelper dbHelper = new HLDatabaseHelper(mContext);return dbHelper.checkUninstallList(packagename);}//  add for uninstaller black list end//  add 2024-7-10 startprivate boolean isOpenUnInstaller() {HLDatabaseHelper dbHelper = new HLDatabaseHelper(mContext);return dbHelper.getTableStatus(2);}//  add 2024-7-10 end

到此就完成修改了,有疑问的欢迎留言,有什么优化建议的也欢迎留言。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 图卷积(GCN)
  • 第一章——数组基础(概念篇python版)
  • Android+Jacoco+code-diff全量、增量覆盖率生成实战
  • 共享经济背景下校园、办公闲置物品交易平台-计算机毕设Java|springboot实战项目
  • 系统架构设计师 - 软件工程(2)
  • Mysql面试一
  • 【数据结构算法经典题目刨析(c语言)】使用栈实现队列(图文详解)
  • javaEE中自定义注解以及注解的解析
  • CSP部分模拟题题解
  • 探索sqlmap的奥秘:Python中的强大SQL注入检测工具
  • python实现K-means图像聚类
  • Kubernetes--命令行工具 kubectl
  • 参与团体标准的意义以及作用
  • 旋转图像(LeetCode)
  • docker 启动 mongo,redis,nacos.
  • 【mysql】环境安装、服务启动、密码设置
  • 4个实用的微服务测试策略
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Date型的使用
  • HTTP那些事
  • Javascript弹出层-初探
  • Java应用性能调优
  • Linux下的乱码问题
  • opencv python Meanshift 和 Camshift
  • supervisor 永不挂掉的进程 安装以及使用
  • XML已死 ?
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 大型网站性能监测、分析与优化常见问题QA
  • 分享一份非常强势的Android面试题
  • 给第三方使用接口的 URL 签名实现
  • 好的网址,关于.net 4.0 ,vs 2010
  • 前端_面试
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 微信小程序设置上一页数据
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 源码安装memcached和php memcache扩展
  • 找一份好的前端工作,起点很重要
  • python最赚钱的4个方向,你最心动的是哪个?
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • # 飞书APP集成平台-数字化落地
  • #HarmonyOS:Web组件的使用
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #QT(串口助手-界面)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (~_~)
  • (07)Hive——窗口函数详解
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (第27天)Oracle 数据泵转换分区表
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (附源码)计算机毕业设计高校学生选课系统
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析