首页 > 解决方案 > 列出 Android 中的所有应用

问题描述

我正在尝试使用 queryIntentActivities 方法列出 android 设备中的所有应用程序,但该列表并未返回所有应用程序,它仅返回其中三个。这是我的代码:

    PackageManager packageManager = getPackageManager();

    Intent intent = new Intent(Intent.ACTION_MAIN, null);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);

    List<ResolveInfo> allApps = packageManager.queryIntentActivities(intent, 0);
    for (ResolveInfo ri : allApps) {
        Log.d("Labels", String.valueOf(ri.loadLabel(packageManager)));
    }

现在有没有人为什么它只返回 3 个应用程序?

标签: javaandroid

解决方案


您很可能尝试在 Android 11 上执行此操作。确保将<uses-permission android:name"android.permission.QUERY_ALL_PACKAGES">权限添加到 AndroidManifest.xml 文件。

虽然我尚未测试 R DP2 的这一方面,但您的应用程序现在似乎一般无法找出安装了哪些其他应用程序。引用的示例是 queryIntentActivities(),但要使其真正起作用,您需要认真地对 PackageManager 进行 lobotomize。您可以将某些包和某些结构列入白名单,以尝试在某些用例中使用它。而且,这就是在 DP1 中看到的神秘 QUERY_ALL_PACKAGES 权限发挥作用的地方——该权限消除了这些新限制。鉴于“寻找 Google Play 为需要此权限的应用程序提供指南”警告,最安全的假设是,如果您尝试使用它,最终您将被机器人禁止进入 Play 商店。


推荐阅读