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

PackageManager queryIntentActivities查询deeplink返回空列表问题排查

根本原因
  • 包可见性声明匹配规则不兼容厂商ROM
    你当前在AndroidManifest.xml的标签中仅声明了BROWSABLE类别,但绝大多数可接收https隐式Intent的应用(包括浏览器、支持深层链接的App如WhatsApp),其注册的intent filter都会同时声明android.intent.category.DEFAULT才能正常接收隐式调用。三星ROM的intent匹配规则比原生Android更严格,你当前的查询条件无法匹配到这些应用的filter,因此系统会按照包可见性规则过滤所有结果,返回空列表。
  • 查询逻辑存在版本适配漏洞
    你构造的跳转Intent没有添加CATEGORY_DEFAULT类别,部分系统会直接过滤掉缺少该类别的隐式Intent;同时PackageManager.MATCH_ALL标识在Android 11及以上版本和包可见性规则结合时,在定制ROM中会出现异常过滤的问题,原生Android的宽松校验能返回结果,但厂商ROM会严格执行限制。
修复方案

1. 调整AndroidManifest的queries声明

补充DEFAULT类别声明,覆盖所有可处理https链接的应用匹配规则:

<queries>
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="https" />
    </intent>
</queries>

2. 优化查询函数逻辑

补充Intent类别,调整查询flag适配不同系统版本:

private fun hasAppToHandleIntent(context: Context, intent: Intent): Boolean {
    // 补充默认类别,适配普通隐式Intent的匹配规则
    intent.addCategory(Intent.CATEGORY_DEFAULT)
    val packageManager = context.packageManager
    val queryFlag = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        // 用MATCH_DEFAULT_ONLY替代MATCH_ALL,更符合隐式跳转的匹配逻辑
        PackageManager.MATCH_DEFAULT_ONLY
    } else {
        0
    }
    val matchedApps = packageManager.queryIntentActivities(intent, queryFlag)
    return matchedApps.isNotEmpty()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:07