Android带参数DeepLink创建问题:配置<intent-filter>后无效求解决
解决Android DeepLink接收参数的问题
嗨,我来帮你搞定这个DeepLink配置的问题~你之前的配置失效,核心问题是在<data>的pathPrefix里直接写参数占位符是不对的,Android的intent-filter是用来匹配URL的结构,不是这么定义参数的。
正确的<intent-filter>配置
你应该把路径和参数分离开,参数属于URL的query部分,不需要在pathPrefix里声明。正确的配置应该是这样:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.BROWSABLE"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="my-scheme" android:host="my.host.name" android:pathPrefix="/data"/> </intent-filter>
这样配置后,像my-scheme://my.host.name/data?name=小明&token=xyz789这样的URL就能匹配到你的Activity了。
在Activity中获取参数
配置好后,你需要在对应的Activity里解析URL的参数。可以在onCreate或者onNewIntent方法里做这件事:
// Kotlin示例 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) intent.data?.let { uri -> val name = uri.getQueryParameter("name") val token = uri.getQueryParameter("token") // 这里处理拿到的参数,比如显示或者做业务逻辑 name?.let { Log.d("DeepLink", "收到name参数:$it") } token?.let { Log.d("DeepLink", "收到token参数:$it") } } }
如果是Java的话:
// Java示例 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Uri uri = getIntent().getData(); if (uri != null) { String name = uri.getQueryParameter("name"); String token = uri.getQueryParameter("token"); // 处理参数逻辑 if (name != null) Log.d("DeepLink", "收到name参数:" + name); if (token != null) Log.d("DeepLink", "收到token参数:" + token); } }
额外注意点
- 如果你希望强制某些参数必须存在,可以添加
android:queryParameterName到<data>里,比如:
不过一般更灵活的方式是在代码里判断参数是否存在,再做相应处理。<data android:scheme="my-scheme" android:host="my.host.name" android:pathPrefix="/data" android:queryParameterName="name" android:queryParameterName="token"/> - 测试DeepLink的时候,可以用adb命令快速验证:
adb shell am start -W -a android.intent.action.VIEW -d "my-scheme://my.host.name/data?name=test&token=123456" com.your.package.name
内容的提问来源于stack exchange,提问作者BMM
相关产品推荐
相关产品推荐

