Android DevicePolicyManager.setApplicationHidden的实际行为

Android DevicePolicyManager.setApplicationHidden的实际行为,android,device-policy-manager,Android,Device Policy Manager,是否有人对SDK非常了解,能够告诉我为什么在让我的应用程序设备成为所有者并对应用程序列表执行DevicePolicyManager.setApplicationHidden后,我无法找到它们,除非我放置PackageManager.getInstalledApplications(PackageManager.GET\u META\u数据或PackageManager.MATCH\u卸载的\u软件包)在查询标志中?(这意味着仅获取元数据不起作用,隐藏的应用程序也不会被隐藏) 我试图找到它们来解除

是否有人对SDK非常了解,能够告诉我为什么在让我的应用程序设备成为所有者并对应用程序列表执行
DevicePolicyManager.setApplicationHidden
后,我无法找到它们,除非我放置
PackageManager.getInstalledApplications(PackageManager.GET\u META\u数据或PackageManager.MATCH\u卸载的\u软件包)
在查询标志中?(这意味着仅获取元数据不起作用,隐藏的应用程序也不会被隐藏) 我试图找到它们来解除它们的隐藏-但没有成功,除非我正在寻找卸载也

我的理论是,Android并没有真正隐藏它们,而是将它们标记为已卸载,同时保留所有数据——但我在文档中没有找到任何与此相关的信息。想知道是否有人可以澄清这种行为(来源)


谢谢

命名不明确,但确实有效地卸载了应用程序,但将APK和数据保留在存储中。如果您正在寻找一种在不卸载应用程序的情况下阻止其使用的方法,您可以尝试

您可以在(下面的相关摘要)中找到
setApplicationHidden
的源代码。其逻辑很简单:

  • setApplicationHiddenSettingAsUser
    调用
    packageSetting.setHidden()
    为用户将包标记为隐藏
  • PackageManagerService
    的其他方法调用
    packageSetting.getHidden()
    以决定是否应返回包
setApplicationHiddenSettingAsUser的代码摘要

@Override
public boolean setApplicationHiddenSettingAsUser(String packageName, boolean hidden,
        int userId) {
    PackageSetting pkgSetting;
    ...
    try {
        ...
        synchronized (mPackages) {
            pkgSetting = mSettings.mPackages.get(packageName);
            ...
            if (pkgSetting.getHidden(userId) != hidden) {
                pkgSetting.setHidden(hidden, userId);
                mSettings.writePackageRestrictionsLPr(userId);
                ...
            }
        }
        ...
    }
}