测试设备:Redmi K80 HyperOS2.0.107.0
如图,我已经禁用了读取已安装列表权限(首次安装时就没给)
进入华为应用市场的更新页面也提示我开启已安装应用权限
可是进入应用更新页面,华为应用市场仍然能检测到我需要更新的应用和应用版本
Android 系统中有除了通过 QUERY_ALL_PACKAGES 以外的获取已安装应用列表的方式嘛?
也不是系统应用,华为应用市场我自己安装的,再说小米设备上怎么可能预装华为的应用市场

     1 
                    
                    Ackvincent      214 天前 
                    
                    Deepseek 给出的答案:华为应用市场主要依赖系统级 API (如 PackageManager 、ApplicationInfo 等)获取已安装应用的信息,而无需申请「读取应用列表权限」。 
                 | 
            
     2 
                    
                    Ackvincent      214 天前 
                    
                    使用 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      214 天前 via Android 
                    
                    target api 不是 11 ? 
                 | 
            
     7 
                    
                    ysc3839      214 天前 via Android    我自己下载了确认了一下,target api 是 11 ,有申请 QUERY_ALL_PACKAGES 权限,MIUI 里禁止读取应用列表,还是能读取到。 
                 | 
            
     8 
                    
                    dant      214 天前    可以通过 intent filter 只查询具有桌面图标的应用,不受 QUERY_ALL_PACKAGES 权限限制: https://stackoverflow.com/questions/79527331 
                 | 
            
     9 
                    
                    yuhaofe      214 天前     | 
            
     10 
                    
                    yuhaofe      214 天前    这个权限禁止挺幽默的,随便下了个第三方启动器,禁了应用列表权限,还是能正常显示所有 App ,想获取列表的 App 肯定会把所有能调的接口全调一遍,只限制一个没有任何意义…… 
                 | 
            
     13 
                    
                    hidev      214 天前    刚好 HackerNews 上最近挺火的一篇文章就在吐槽这个问题: 
                ![]() 文章链接: https://peabee.substack.com/p/everyone-knows-what-apps-you-use  | 
            
     14 
                    
                    moefishtang   OP @hidev 其实还有一个方法,应用间通过内嵌的 SDK 发现彼此   
                例如我在美团中使用微信支付订外卖,虽然没有给美团应用列表读取权限,仍然可以唤起微信进行支付 理论上应用商城可以做到让上架的 app 都内嵌统计 SDK ,通过 SDK 的方式实现读取安装列表和检测应用更新  | 
            
     15 
                    
                    lisongeee      213 天前    刚刚测了一下,packageManager.getPackageInfo(appId, 0) 拒绝权限没用,仍然可以获取到信息 
                也就是只需要有一个 appId list 就行了,queryIntentActivities 和 getInstalledPackages 都可以得到这个列表 前者我自己设备测试返回数量为 73 ,后者为 370 ,多出来的 300 其实都是没有桌面图标的系统应用,完全不影响  |