应用黑名单以及静默安装的实现

需求描述:
1.主要给上层应用提供一个添加应用黑名单接口,被添加到黑名单的应用用户无法对其进行安装。同时也可以对这个黑名单进行增加和删除
2.给上层应用提供一个静默安装卸载的接口,应用调用这个接口可以实现应用的静默安装和卸载。

具体实现:
一.应用黑名单添加:
1.在PackageManagerService中创建一个数据库用来存储这些应用的包名,同时实现对于此数据库的增删改查。
2.在handleStartCopy()函数中去读取数据库遍历和安装的包名进行对比,如果存在于黑名单就不进行安装同时返回不安装的信息。
代码:
List packageName = new ArrayList();
packageName = getAppRestriction();
if(packageName != null) {
for(String pakgs : packageName) {
if(pkgLite.packageName.equals(pakgs)) {
ret = PackageManager.INSTALL_FAILED_INVALID_URI;
break;
} else {
ret = PackageManager.INSTALL_SUCCEEDED;
}

            }
        } else {
            ret = PackageManager.INSTALL_SUCCEEDED;
        }

二.静默安装的实现:
1.通过解析pm命令的方式进行静默安装,因为考虑到重复安装的情况,所以使用pm install -r命令。
2.但是在手机没有root的情况下,pm命令是安装不成功的,原因在于PackageManagerService的installPackageAsUser()函数有一个权限的检查,
所以在这里添加包名判断来确定进不进行权限检查。
代码:
final int callingUid = Binder.getCallingUid();
if(getNameForUid(callingUid) != null) {
if(!getNameForUid(callingUid).equals(“com.example.requiredemo”)) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null);
}
} else
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES, null);

发布了5 篇原创文章 · 获赞 1 · 访问量 686

猜你喜欢

转载自blog.csdn.net/u013490411/article/details/81908126