2

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

提前致谢

4

4 回答 4

2

没有 API 可以做这样的事情

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

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

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

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

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

于 2012-12-31T06:30:18.183 回答
1

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

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

在配置文件所有者管理员的情况下,这两个 API 将仅适用于配置文件管理的即时应用程序(设置工作配置文件后,大多数应用程序被克隆并具有 2 个实例 - 用户即时和配置文件即时)。


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

于 2018-01-25T16:32:19.277 回答
0

如果您想在孩子不知情的情况下执行此操作,您可以不时检查他/她手机中安装的应用程序并卸载不需要的应用程序。请参阅 Install apps silently 中接受的答案,并授予 INSTALL_PACKAGES 权限。您应该使用设备系统证书对您的应用进行签名。

于 2012-12-31T06:39:15.090 回答
-2

是的,可以以编程方式执行此操作。从下面的代码中,您可以使用意图来执行此操作。安装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);

希望它会帮助你。谢谢。

于 2012-12-31T06:30:11.487 回答