为何`getPackagesHoldingPermissions`仅返回系统应用而非所有含互联网权限应用?
问题解决:仅获取到系统应用而非第三方应用的原因
目标SDK版本限制:你的应用
targetSdkVersion大概率≥Android 11(API 30),而WireGuard的targetSdkVersion可能低于该版本。从Android 11开始,系统收紧了应用获取其他应用信息的权限,默认情况下只能访问系统应用和自身,无法获取第三方应用数据。权限声明缺失:针对
targetSdkVersion≥30的应用,必须额外声明权限或配置查询范围:- 若需要获取所有应用,需在Manifest中添加:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> - 若不想使用上述权限(避免Google Play审核限制),可通过
<queries>标签指定要查询的应用范围,比如获取所有带桌面启动图标的应用:<queries> <intent> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent> </queries>
WireGuard因
targetSdkVersion较低,不受该权限限制,因此能正常获取所有第三方应用。- 若需要获取所有应用,需在Manifest中添加:
验证步骤:
- 检查应用的
build.gradle中targetSdkVersion数值,确认是否≥30。 - 添加对应权限或
<queries>配置后重新编译测试。
- 检查应用的
内容的提问来源于stack exchange,提问作者aj3423
相关产品推荐
相关产品推荐

