0

我正在实现一个使用 DevicePolicyManager 的应用程序。我已经使用 adb 配置了我的设备,并且我的应用程序正在设备管理模式下运行。

我正在使用 setApplicationHidden 方法使用它们的包名称隐藏/取消隐藏应用程序。我想做一个白名单系统,我可以在其中指定一些不禁用的应用程序,并且我想禁用手机上安装的其余应用程序。我可以隐藏不在我的白名单上的应用程序,但是一旦它们被隐藏,我就无法使用 packagemanager 或任何其他方法获取有关它们的任何信息。

所有我能得到关于未隐藏应用程序的信息。

有没有一种方法可以在不存储我隐藏在某处的应用程序的包名称的情况下检索这些信息?

4

2 回答 2

3

所以,正确的答案实际上是在评论中给出的。刚刚对其进行了测试,它工作得非常好,包括获取ApplicationInfo和标签。

要获取设备上的包的完整列表(包括被DevicePolicyManger隐藏),您应该包括标志:MATCH_DISABLED_COMPONENTS | MATCH_UNINSTALLED_PACKAGES

context.getPackageManager().getInstalledPackages(MATCH_DISABLED_COMPONENTS | MATCH_UNINSTALLED_PACKAGES);
于 2018-04-30T14:50:49.160 回答
2

我也一直在寻找这个答案。

这并不理想,但会返回所有包以包括隐藏和禁用。

Runtime.getRuntime("pm list packages -u").exec();

这是我如何使用它

StringBuffer output = new StringBuffer();
    Process p;
    try {
        p = Runtime.getRuntime().exec(command);
        p.waitFor();
        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

        String line = "";
        while ((line = reader.readLine())!= null) {
            output.append(line + "\n");
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    String response = output.toString();

这为您提供了所有包名称,但是如果您尝试将它们与 PackageManager 一起使用,除非您先取消隐藏它们,否则您将获得 NameNotFoundException。

于 2017-03-15T04:46:05.723 回答