2

有没有人足够了解 SDK 来说明为什么在使我的应用程序设备所有者并执行DevicePolicyManager.setApplicationHidden应用程序列表之后我找不到它们,除非我PackageManager.getInstalledApplications(PackageManager.GET_META_DATA or PackageManager.MATCH_UNINSTALLED_PACKAGES)输入查询标志?(意味着只是GET_META_DATA无法工作,隐藏的应用程序不会被隐藏)我试图找到它们以取消隐藏它们 - 但除非我也在寻找卸载,否则没有成功。

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

谢谢!

4

1 回答 1

2

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

您可以找到setApplicationHiddenin PackageManagerService.setApplicationHiddenSettingAsUser()(下面的相关摘要)的来源。它的逻辑很简单:

  • 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);
                ...
            }
        }
        ...
    }
}
于 2018-02-09T13:58:04.830 回答