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

Android 11三星S20 Ultra无法识别已安装Telegram应用问题咨询

问题根因

这个问题不属于三星S20 Ultra机型的特有管控限制,是Android 11(API 级别30)引入的包可见性权限变更导致的通用问题:

  • Android 10及更低版本中,应用无需额外权限即可自由查询设备上安装的所有应用的包信息,你的原有代码逻辑可正常运行
  • Android 11开始系统收紧了该权限,默认仅允许应用查询系统预置应用、与自身有直接交互链路的应用,未在清单中声明查询权限的第三方应用,调用getPackageInfo会统一抛出NameNotFoundException,导致误判应用未安装

修复方案

1. 优先方案:清单文件声明查询包名

在你的AndroidManifest.xml根节点下增加<queries>标签,指定你需要查询的Telegram包名即可,不需要申请额外权限,也不会影响Google Play上架:

<manifest ...>
    <queries>
        <!-- 声明需要查询官方Telegram的包信息 -->
        <package android:name="org.telegram.messenger" />
        <!-- 如有兼容其他Telegram衍生客户端的需求,可追加对应包名,例如Telegram X的org.thunderdog.challegram -->
    </queries>

    <!-- 原有其他配置 -->
    <application .../>
</manifest>

2. 可选方案:申请全量包查询权限

如果你有批量查询多个未知包名应用的需求,可以申请QUERY_ALL_PACKAGES敏感权限,但该权限需要向Google Play提交合理的使用场景说明,否则会被驳回上架,非必要不推荐使用:

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

3. 代码兼容优化

针对Android 13及以上版本的getPackageInfo方法废弃问题,可以同步优化代码的版本兼容:

private fun isTelegramAvailable(): Boolean {
    val pm = applicationContext.packageManager
    return try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
            pm.getPackageInfo(
                "org.telegram.messenger",
                PackageManager.PackageInfoFlags.of(PackageManager.GET_ACTIVITIES.toLong())
            )
        } else {
            @Suppress("DEPRECATION")
            pm.getPackageInfo("org.telegram.messenger", PackageManager.GET_ACTIVITIES)
        }
        true
    } catch (e: PackageManager.NameNotFoundException) {
        false
    }
}

三星机型特殊情况排查

如果完成上述配置后仍有少量三星用户反馈问题,可以引导用户排查两个系统设置:

  • 检查手机管家中你的应用的权限配置,是否开放了「查询已安装应用列表」的权限
  • 确认用户没有将Telegram设置为系统隐藏应用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:42:03