java - 列出 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 个应用程序?
解决方案
您很可能尝试在 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 商店。
推荐阅读
- flutter - 自定义小部件 GridView
- javascript - Vue.js 数据未在视图中显示我正在尝试显示仅显示空白的待办事项列表
- python - _frozen_importlib._DeadlockError:_ModuleLock('django.test.signals') 在 140668266856120 检测到死锁
- android - 无法与客户端建立 TLS
- svg - 如何以编程方式确定 svg 路径属于哪个几何形状?
- javascript - 为什么在事件循环之外执行 setTimeout 和 setImmediate 的顺序不一致?
- android-mediaplayer - 在 Android 中播放我的应用语音指导时如何降低音乐音量,然后再次增加音乐?
- apache - 通过 .htaccess 重定向不起作用
- c++ - 基于对向量中的第一个元素的降序排序没有给出期望的结果
- ios - 容器生成器