是否有意为所有用户卸载应用程序?

时间:2015-02-26 10:08:13

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

背景

通过使用"ACTION_DELETE"意图,只需使用{{3}}意图来调用卸载应用程序的正常方法:

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

问题

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

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

enter image description here

问题

我在文档中搜索过,但无法找到答案:

  1. 有没有办法通过意图执行此操作?也许有些东西可以添加到我上面写的意图中?

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

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

1 个答案:

答案 0 :(得分:7)

  

有没有办法通过意图执行此操作?也许   有什么可以添加到我上面写的意图中吗?

是的,但要小心。您可以传递Intent.EXTRA_UNINSTALL_ALL_USERS

然而,它是隐藏的,因为它:

  

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

如果您觉得有必要并且不同意谷歌那么,你可以直接传递常数。例如,以下是传递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);

<强>结果

example

  

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

不,命令保持不变。

`adb uninstall 'some.package.name'` 

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

  

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

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

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

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