【问题标题】:Is there an intent for uninstallation of an app for ALL users?是否有为所有用户卸载应用程序的意图?
【发布时间】:2015-04-28 15:47:06
【问题描述】:

背景

调用卸载应用程序的正常方法是使用"ACTION_DELETE"意图:

startActivity(new Intent(Intent.ACTION_DELETE, Uri.parse("package:" +packageName)));

问题

从某些 Android 版本开始(不记得是哪个版本),可以为同一设备上的多个用户安装应用程序。

这意味着有一种卸载应用程序的新方法,它会为所有用户卸载它(图片取自 Lollipop - Android 5.0):

问题

我在文档中搜索过,但找不到这些问题的答案:

  1. 有没有办法通过一个意图来执行这个操作?也许可以添加到我上面写的意图中?

  2. ADB 是否有新命令为所有用户删除应用程序?

  3. 有没有办法检查是否为多个用户安装了一个应用程序?

【问题讨论】:

  • 这仍然适用于所有用户 "adb uninstall "
  • @zoram 真的吗?你测试过吗?另外,是否可以使用 ADB 为指定/当前用户卸载应用程序?

标签: android android-intent android-5.0-lollipop uninstallation multi-user


【解决方案1】:

有没有办法通过一个意图来执行这个操作?可能是 要添加到我上面写的意图的东西吗?

是的,但要小心。你可以传入Intent.EXTRA_UNINSTALL_ALL_USERS

但是,它被隐藏了,因为它:

不应该是正常申请流程的一部分

如果您认为有必要并且不同意 Google 对此的看法,无论如何您都可以直接传递常量。举个例子,下面是使用该常量传入falsetrue 之间的区别

    final Uri packageURI = Uri.parse("package:" + "some.package.name");
    final Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI);
    uninstallIntent.putExtra("android.intent.extra.UNINSTALL_ALL_USERS", false or true);
    startActivity(uninstallIntent);

结果

ADB 是否有新命令为所有用户删除应用程序?

不,命令保持不变。

`adb uninstall 'some.package.name'` 

这将为所有用户删除该应用。我不知道指定特定用户的方法。

有没有办法检查是否为多个用户安装了一个应用程序?

不,我不知道。事实上,当设置应用程序决定将"Uninstall for all users" 选项放在选项菜单中时,它基本上是基于是否有多个用户期间这样做的,而不是如果当前用户和另一个用户都安装了应用程序。

更不用说,UserManager 中的大多数方法,您甚至需要判断设备上是否有多个用户,例如 UserManager.getUserCount,需要 MANAGE_USERS 权限,这是一个系统 API 并且隐藏.所以,我什至不确定为什么这是一个公共方法。

此外,您可以像我一样通过在您的设备上创建一个虚拟用户来轻松测试您的所有问题。您甚至不需要登录 Google 帐户。

【讨论】:

  • 谢谢。我需要知道是否为我的应用程序的多个用户安装了一个应用程序(此处:play.google.com/store/apps/details?id=com.lb.app_manager),以便我可以让用户选择卸载是针对所有用户还是仅针对当前用户。多用户支持实际上是从 Android 4.2 开始的,我找不到需要的信息。
  • 我想我可以使用 PackageManager->getPackagesForUid (这里:developer.android.com/reference/android/content/pm/… )来获取特定用户的包,但是为了获取用户 ID 列表,我需要使用 UserManager ->getUserProfiles 然后 getSerialNumberForUser " ,但是 "getUserProfiles 需要 API 21 并且甚至不能给出 "MANAGE_USERS" 的权限(正如你所写的)......无论如何,我会勾选你的答案并创建一个新问题
  • 您写道“它基本上是根据是否有多个用户期间这样做”。我怎么知道有多个用户帐户? “/mnt/user”上至少有一个文件夹是否意味着有多个用户?此外,所有 adb 命令是否会影响所有用户(例如清除应用程序的数据),而不仅仅是当前用户?
  • 对于 adb,您可以运行:adb uninstall --user -1 'some.package.name' - 这意味着所有用户都卸载,因为 -1 = UserHandle.USER_ALLif (userId == UserHandle.USER_ALL) { userId = UserHandle.USER_OWNER; flags |= PackageManager.DELETE_ALL_USERS; }
  • 有没有类似onDestroy的功能?这样我就可以在用户卸载我的应用程序时运行代码。
猜你喜欢
  • 2018-08-22
  • 2011-12-13
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2012-01-21
  • 1970-01-01
  • 2011-10-10
相关资源
最近更新 更多