java 跳转deeplink链接_Android通过DeepLink方式跳转其他App传递参数

本文介绍了Android中如何使用DeepLink实现从网页或其他应用跳转并传递参数。详细阐述了接收参数方在清单文件的配置、通过Uri获取参数的方法,以及发送参数方如何构建Intent并启动跳转。在实际应用中需要注意,当被跳转的App已启动时,应重写onNewIntent()来获取最新的Intent。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上对于安卓DeepLink方式跳转传递参数的例子较少,说的也不客观,实践之后发现还是有一些坑。其实为什么要用DeepLink方式跳转,有些是因为引流的原因,他们希望通过网页就能直接跳转到App的界面。还有其实就是某些业务的需要,需要统一跳转方式,方便维护代码。如果不知道DeepLink是什么,可以自行百度一下,下面介绍一下实际的用法:

接收参数方:

1.跳转的App需要在清单文件注册以下是例子:

package="com.example.alex.deeplinkproject">

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

android:scheme="open"

android:host="app.test.com"

android:pathPrefix="/game"

/>

通过三个字段生成一个URL:scheme://host pathPrefix 如上:open://app.test.com/game

2 需要接收的参数通过Uri获取

//通过Deeplink 跳转获取参数

String action =getIntent().getAction();

if(Intent.ACTION_VIEW.equals(action)) {

Uri data =getIntent().getData();

if (data != null) {

String appId = data.getQueryParameter("appId");

String token = data.getQueryParameter("token");

String extend = data.getQueryParameter("extend");

String merchant = data.getQueryParameter("merchant");

String agent = data.getQueryParameter("agent");

}

发送参数方(以下代码比较简单使用Kotlin编写):

1.需要传递对应的参数而后拼接到Uri后面,以下是例子

classMainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

findViewById(R.id.bt1).setOnClickListener {

val intent = Intent(Intent.ACTION_VIEW, Uri.parse("open://app.test.com/game?appId=com.game.sid21&token=21token&extend=21extend&merchant=21merchant&agent=21agent"))

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

startActivity(intent)

}

}

}

类似GET请求已Key=Value的形式传递。注意,Uri.parse 中的参数不可用+号进行拼接会出现无法获取参数的情况。跳转到其他App采用开启新的栈方式,避免误认为是一个App。

以上就是一个完整的跳转流程代码,但是实际上,当被跳转的App已经启动的时候我们有时候会取不到数据,但是跳转是正常的跳转了。这边要注意我们使用的flag,当被启动的App已经启动,他会在onNewIntent()返回我们的正确的Intent而不是getIntent()了。你需要重写此方法获取最新的Intent。最好抽取一个方法出来,在onCreate()和onNewIntent()中都获取Intent()。如下:

@Override

protected voidonCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//通过Deeplink 跳转获取参数

getIntentData(getIntent());

}

@Override

protected voidonNewIntent(Intent intent) {

super.onNewIntent(intent);

getIntentData(intent);

}

private voidgetIntentData(Intent intent){

String action =intent.getAction();

if(Intent.ACTION_VIEW.equals(action)) {

Uri data =getIntent().getData();

if (data != null) {

String appId = data.getQueryParameter("appId");

String token = data.getQueryParameter("token");

String extend = data.getQueryParameter("extend");

String merchant = data.getQueryParameter("merchant");

String agent = data.getQueryParameter("agent");

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值