赣州网站建设-赣州做网站,网站优化说明,西樵网站开发,烟台专业做网站的公司本文目的主要是记录自己系统#xff08;Android7.1系统#xff09;开发实现代码#xff0c;以便后期通用的功能可以直接使用#xff0c;不需要再去通过搜索然后筛选再验证的繁琐流程#xff0c;大大减小自己的开发时间。 我实现思路是在系统内新增自己的数据库用来记录禁止…本文目的主要是记录自己系统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)) {ArrayListString 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
到此就完成修改了有疑问的欢迎留言有什么优化建议的也欢迎留言。