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

本文目的主要是记录自己系统(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 start
        if (isOpenUnInstaller()) {
            if (isUnInstallerEnable(packageName)) {
                return PackageManager.DELETE_FAILED_INTERNAL_ERROR;
            }
        }
        //  add for uninstaller black list end

        PackageSetting uninstalledPs = null;

......
}

 //  add for uninstaller black list start
    private boolean isUnInstallerEnable(String packagename) {
        HLDatabaseHelper dbHelper = new HLDatabaseHelper(mContext);
        return dbHelper.checkUninstallList(packagename);
    }
    //  add for uninstaller black list end

    //  add 2024-7-10 start
    private boolean isOpenUnInstaller() {
        HLDatabaseHelper dbHelper = new HLDatabaseHelper(mContext);
        return dbHelper.getTableStatus(2);
    }
    //  add 2024-7-10 end

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

panyingdao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值