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

Android 11平台调用getInstalledPackages返回空列表问题咨询

问题根因

Android 11(API Level 30)引入了包可见性过滤机制,系统默认限制普通应用获取全量已安装应用列表,未做适配的前提下调用getInstalledPackages(0)仅能返回自身应用、少量系统级应用的信息,甚至直接返回空列表。Android 10及更低版本无该限制,因此魅族17上运行逻辑正常。

适配方案

根据实际业务需求二选一即可:

方案1:仅查询特定范围应用(推荐,无权限审核风险)

无需申请敏感权限,只需在AndroidManifest.xml中添加<queries>标签声明你需要查询的应用范围,常见场景配置如下:

  • 查询所有带桌面启动图标的应用:
<queries>
    <intent>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent>
</queries>
  • 查询指定包名的应用:
<queries>
    <package android:name="com.xxx.targetapp" />
</queries>

方案2:需要获取全量已安装应用列表

如果业务确实需要查询所有已安装应用,直接在AndroidManifest.xml中添加权限声明:

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />

注意:该权限属于敏感权限,若应用需上架Google Play,必须向平台提交该权限的合理使用场景说明,否则会被驳回上架请求。

添加对应配置后原有调用逻辑无需修改,即可拿到正常的返回结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 02:36:03