【问题标题】:Actual behavior of DevicePolicyManager.setApplicationHiddenDevicePolicyManager.setApplicationHidden 的实际行为
【发布时间】:2018-02-09 10:27:37
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: android device-policy-manager


    【解决方案1】:

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

    您可以在PackageManagerService.setApplicationHiddenSettingAsUser() 中找到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);
                    ...
                }
            }
            ...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      相关资源
      最近更新 更多