繁体   English   中英

如何以编程方式阻止Android中应用程序的安装/卸载?

[英]How to programmatically prevent Install/Uninstall of applications in android?

是否可以以编程方式阻止android中应用程序的安装/卸载? 如果可能的话,如何为我的Kids应用程序执行此操作。我无法获得有用的答案。任何帮助我都非常感谢。

提前致谢

没有API可以做这样的事情

但是-您可以开发自己的自定义启动器

Android-创建自定义启动器 ,并以此限制用户查看或仅执行所需的操作。 例如-当您实现显示所有应用程序的主屏幕时-当您实现卸载功能时-打开一些对话框,要求输入密码。

您还需要植根设备,以隐藏系统栏,以防止用户访问设置。 隐藏状态栏有点棘手,并且需要运行linux命令。 例如,在蜂窝中,您可以这样做-http://android.serverbox.ch/?p=306

stock-rom随附的内置默认启动器没有提供此功能,但是我敢肯定,您可以在Google Play中找到一些提供此类功能的自定义启动器。 在安装启动器并重新启动设备后-您可以将他定义为默认启动器-这样,即使您的孩子将重新启动设备-他们也只能访问自定义启动器。

作为Android开发人员,如果没有人开发这样的启动器,我会感到非常惊讶,因为对于开发启动器应用程序的人来说,这是非常简单的开发功能。

从Android Lollipop(5)开始, DevicePolicyManager API允许配置文件所有者管理员或设备所有者管理员隐藏和阻止卸载托管应用程序。 在将您的管理应用程序设置为配置文件所有者或设备所有者之后,请使用以下API:

  • setUninstallBlocked :这允许定义无法从设备中删除的软件包名称。 只有配置文件/设备所有者才能启用/禁用此标志。
  • setApplicationHidden :这允许定义一个软件包名称,该名称将被隐藏,这意味着它将被完全禁用,并且将从启动器中消失。 请注意,隐藏应用程序不会将其卸载,管理员始终可以取消隐藏它,并使用其所有用户数据完全还原该应用程序。

如果是个人资料所有者管理员,则这两个API仅适用于个人资料托管的即时应用程序(设置工作个人资料后,大多数应用程序都会被克隆并具有2个实例-用户即时和个人资料即时)。


通过直接调用IPackageManager接口 ,共享系统uid( android:sharedUserId =“ android.uid.system” )的系统应用程序可以使用相同的功能,而无需成为配置文件/设备所有者。

如果您想在孩子不知情的情况下进行此操作,则可以不时检查手机中安装的应用程序并卸载不需要的应用程序。 授予INSTALL_PACKAGES权限,以静默方式安装应用程序中的已接受答案。 您应该使用设备系统证书对应用程序进行签名。

是的,可以以编程方式执行此操作。从下面的代码中,您可以使用意图进行操作。 安装APK:

 Intent intent = new Intent(Intent.ACTION_VIEW);
 intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
 startActivity(intent);

卸载APK:

 Intent intent = new Intent(Intent.ACTION_DELETE, Uri.fromParts("package",
 getPackageManager().getPackageArchiveInfo(apkUri.getPath(), 0).packageName,null));
 startActivity(intent);

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM