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

Android自定义scheme场景下如何从Intent获取带查询参数的完整deeplink?

问题诱因

  • 测试方式错误(最高发场景)
    如果你通过adb shell am start命令测试自定义scheme深度链接,shell会将&符号识别为命令后台运行的标记,导致&之后的查询参数不会被传递给Android系统Intent,最终你拿到的Uri就会缺少参数。如果单参数场景下你没有用引号包裹整个Uri,也可能出现查询参数被截断的情况。
  • 跳转容器的自定义scheme处理缺陷
    部分老旧系统内置浏览器、自定义WebView未对非http/https的scheme做兼容处理,跳转时会自动截断查询参数,仅把scheme+host+path部分传递给系统。如果你的WebView重写了shouldOverrideUrlLoading方法,手动处理自定义scheme时存在逻辑错误,也可能导致参数被截取。
  • 唤起端Uri构造错误
    如果是第三方应用/网页唤起你的应用,对方可能未正确把查询参数拼接到Uri中,或是误将参数放到了Intent的Extra字段而非Uri的query部分,也会导致你拿到的Uri没有对应参数。
  • 定制ROM的Uri解析bug
    少量国产定制ROM对自定义scheme的Uri解析逻辑存在缺陷,会主动忽略query部分的内容。

解决方法

  1. 修正adb测试方式
    测试时将整个Uri用单引号包裹,避免特殊字符被shell识别,示例命令:
adb shell am start -a android.intent.action.VIEW -d 'testlink://www.test.com/strategy?year=2021'
  1. 优先用App Links替代自定义scheme
    你已经验证http/https scheme可以正常获取完整参数,建议优先采用官方推荐的App Links实现深度链接,既可以规避自定义scheme的参数丢失问题,也能解决未安装应用时跳转失败的问题。
    如果必须保留自定义scheme,网页端跳转建议采用官方Intent scheme写法,避免浏览器截断参数:
window.location.href = 'intent://www.test.com/strategy?year=2021#Intent;scheme=testlink;package=你的应用包名;end';
  1. 兼容参数获取逻辑
    你当前的intent-filter配置是正确的,不需要修改。获取参数时建议优先调用getIntent().getData().getQueryParameter("参数名")直接获取指定参数,不要依赖Uri.toString的结果做自行解析,部分场景下可以正确拿到被截断展示的参数。也可以和唤起端约定,将参数同时放到Intent的Extra中传递,做双重兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:45:04