You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android API 33如何获取所有已安装应用?旧方法已弃用

Android 13(API 33)获取全部已安装应用的等效替代方案

在Android 13中,要替代API 33之前通过packageManager.queryIntentActivities(i, 0)加QUERY_ALL_PACKAGES权限获取全部应用的逻辑,可按以下两种场景处理:

1. 需获取所有已安装应用(仅合规场景使用)

如果你的应用属于应用管理器、安全类工具等确实需要访问全部应用的场景,可继续保留权限声明,同时使用新的API重载:

  • 在Manifest中保留权限:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
  • 使用带MATCH_ALL标志的新方法:
val intent = Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER)
val resolveFlags = PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_ALL.toLong())
val allActivities = packageManager.queryIntentActivities(intent, resolveFlags)

注意:Google对QUERY_ALL_PACKAGES权限的审核极为严格,非必要场景不建议使用。

2. 定向查询(推荐)

如果你的应用不需要获取全部应用,应采用定向查询避免申请敏感权限:

  • 针对能处理特定Intent的应用:构造对应Intent,搭配MATCH_DEFAULT_ONLY标志查询
  • 针对已知包名的应用:直接调用getPackageInfo获取目标应用信息

核心差异说明

API 33弃用旧的queryIntentActivities重载后,标志位需通过ResolveInfoFlags.of()封装,MATCH_ALL标志可实现旧方法中0参数的等效效果——返回所有匹配的应用(需配合QUERY_ALL_PACKAGES权限)。

内容的提问来源于stack exchange,提问作者just_user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:01:01