Android 12获取其他应用版本失败的修复方法
Android 12 下获取其他应用版本信息失败的修复方案
Android 12(API 31)引入了包可见性限制,默认情况下应用无法访问其他已安装应用的包信息,这就是你原有代码在Android 12及以上版本失效的核心原因。以下是两种可行修复方案:
方案1:声明特定应用的可见性(推荐)
如果你的应用仅需访问少数特定应用的信息,推荐在AndroidManifest.xml的<application>标签内添加<queries>元素,明确列出目标应用的包名:
<queries> <!-- 替换为你需要访问的目标应用包名 --> <package android:name="com.uptodown.installer" /> </queries>
这种方式严格遵循Android 12的隐私规范,不会触发应用商店的权限审核风险。
方案2:添加QUERY_ALL_PACKAGES权限(通用但需谨慎)
如果你的应用需要获取所有已安装应用的信息,可以在AndroidManifest.xml中添加该权限:
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" tools:ignore="QueryAllPackagesPermission" />
注意:Google Play会对使用该权限的应用进行严格审核,仅允许应用市场、启动器类等确实需要访问全量应用的场景使用,普通应用不建议采用此方案。
代码优化建议
原代码逻辑本身无错误,但可以补充错误提示提升用户体验:
String targetPackage = "com.uptodown.installer"; PackageManager pm = getPackageManager(); try { PackageInfo pInfo = pm.getPackageInfo(targetPackage, PackageManager.GET_ACTIVITIES); String version = pInfo.versionName; textview.setText(version); } catch (PackageManager.NameNotFoundException e) { // 应用未安装或无访问权限时的提示 textview.setText("目标应用未安装"); e.printStackTrace(); }
内容的提问来源于stack exchange,提问作者An Bùi
相关产品推荐
相关产品推荐

