当前位置: 首页 > 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

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

http://www.lryc.cn/news/426690.html

相关文章:

  • wait 和 notify
  • docker 启动 mongo,redis,nacos.
  • Docker Swarm 搭建
  • 浅述TSINGSEE青犀EasyCVR视频汇聚平台与海康安防平台的区别对比
  • 设计模式系列:策略模式的设计与实践
  • 数据挖掘之数据预处理
  • RocketMQ核心知识点整理,值得收藏!
  • 微信小程序骨架屏
  • Window下node安装以及配置
  • 校园疫情防控系统--论文pf
  • 在Debian 9上使用Apt安装Java的方法
  • 人工智能在网络安全中的三大支柱
  • rk3568mpp终端学习笔记
  • 【C++继承】赋值兼容转换作用域派生类的默认成员函数
  • HTML5+JavaScript绘制彩虹和云朵
  • MySQL——单表查询(二)按条件查询(2)带 IN 关键字的查询
  • 【mysql】mysql 用户管理---创建、权限管理等等
  • 本地服务器物理机中redis设置、取消密码
  • 关于xilinx的FFTIP的使用和仿真
  • ant design pro 如何去保存颜色
  • 【Hadoop】建立圈内组件的宏观认识
  • C++:命名空间与输入输出
  • Azure DevOps Server 数据库日志已满,TF30042: The database is full
  • [C#]OpenCvSharp 实现Bitmap和Mat的格式相互转换
  • 【区块链+金融服务】基于区块链的供应链金融系统 | FISCO BCOS应用案例
  • AI语言大模型商业价值深度解析
  • 理解DDD领域驱动设计思想
  • 音频剪辑软件哪个好用?五大音频剪辑软件分享
  • 12.2 使用prometheus-sdk向pushgateway打点
  • HTTPS 详解