测试设备:Redmi K80 HyperOS2.0.107.0
如图,我已经禁用了读取已安装列表权限(首次安装时就没给)
进入华为应用市场的更新页面也提示我开启已安装应用权限
可是进入应用更新页面,华为应用市场仍然能检测到我需要更新的应用和应用版本
Android 系统中有除了通过 QUERY_ALL_PACKAGES 以外的获取已安装应用列表的方式嘛?
也不是系统应用,华为应用市场我自己安装的,再说小米设备上怎么可能预装华为的应用市场
1
Ackvincent 3 天前
Deepseek 给出的答案:华为应用市场主要依赖系统级 API (如 PackageManager 、ApplicationInfo 等)获取已安装应用的信息,而无需申请「读取应用列表权限」。
|
2
Ackvincent 3 天前
使用 PackageManager 的 getPackageInfo 或 getApplicationInfo 方法查询特定应用的信息(如包名、版本号等),无论 Android 版本如何,均不需要申请「读取应用列表权限」。
|
3
moefishtang OP @Ackvincent #1 在搭载 EMUI 或者 HarmonyOS 的设备可以,小米或者其他厂商的系统中会允许第三方应用商城调用系统级 API ?
|
4
moefishtang OP |
5
moefishtang OP @Ackvincent #2 Android11 以上必须声明 QUERY_ALL_PACKAGES 来获取完整应用列表的,否则只能看到自身
典型如酷安 app ,若不授予 QUERY_ALL_PACKAGES ,应用清单中就只有酷安 |
![]() |
6
ysc3839 3 天前 via Android
target api 不是 11 ?
|
![]() |
7
ysc3839 3 天前 via Android ![]() 我自己下载了确认了一下,target api 是 11 ,有申请 QUERY_ALL_PACKAGES 权限,MIUI 里禁止读取应用列表,还是能读取到。
|
![]() |
8
dant 3 天前 ![]() 可以通过 intent filter 只查询具有桌面图标的应用,不受 QUERY_ALL_PACKAGES 权限限制: https://stackoverflow.com/questions/79527331
|
![]() |
9
yuhaofe 3 天前 ![]() |
![]() |
10
yuhaofe 3 天前 ![]() 这个权限禁止挺幽默的,随便下了个第三方启动器,禁了应用列表权限,还是能正常显示所有 App ,想获取列表的 App 肯定会把所有能调的接口全调一遍,只限制一个没有任何意义……
|
![]() |
13
hidev 2 天前 ![]() 刚好 HackerNews 上最近挺火的一篇文章就在吐槽这个问题:
![]() 文章链接: https://peabee.substack.com/p/everyone-knows-what-apps-you-use |
14
moefishtang OP @hidev 其实还有一个方法,应用间通过内嵌的 SDK 发现彼此
例如我在美团中使用微信支付订外卖,虽然没有给美团应用列表读取权限,仍然可以唤起微信进行支付 理论上应用商城可以做到让上架的 app 都内嵌统计 SDK ,通过 SDK 的方式实现读取安装列表和检测应用更新 |
![]() |
15
lisongeee 2 天前 ![]() 刚刚测了一下,packageManager.getPackageInfo(appId, 0) 拒绝权限没用,仍然可以获取到信息
也就是只需要有一个 appId list 就行了,queryIntentActivities 和 getInstalledPackages 都可以得到这个列表 前者我自己设备测试返回数量为 73 ,后者为 370 ,多出来的 300 其实都是没有桌面图标的系统应用,完全不影响 |