Android通过DeepLink⽅式跳转其他App传递参数
⽹上对于安卓DeepLink⽅式跳转传递参数的例⼦较少,说的也不客观,实践之后发现还是有⼀些坑。其实为什么要⽤DeepLink⽅式跳转,有些是因为引流的原因,他们希望通过⽹页就能直接跳转到App的界⾯。还有其实就是某些业务的需要,需要统⼀跳转⽅式,⽅便维护代码。如果不知道DeepLink是什么,可以⾃⾏百度⼀下,下⾯介绍⼀下实际的⽤法:
接收参数⽅:
1.跳转的App需要在清单⽂件注册以下是例⼦:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="schemas.android/apk/res/android"
package="ample.alex.deeplinkproject">
<uses-permission android:name="android.permission.INTERNET" />
<application
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">
<activity android:name=".MainActivity">
<intent-filter>安卓intent用法
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!--url跳转格式为:open://st/game-->
<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="open"
android:host="st"
android:pathPrefix="/game"
/>
</intent-filter>
</activity>
</application>
</manifest>
通过三个字段⽣成⼀个URL:scheme://host pathPrefix 如上:open://st/game
2 需要接收的参数通过Uri获取
//通过Deeplink 跳转获取参数
String action = getIntent().getAction();
if (Intent.ACTION_VIEW.equals(action)) {
Uri data = getIntent().getData();
if (data != null) {
String appId = QueryParameter("appId");
String token = QueryParameter("token"); String extend = QueryParameter("extend"); String merchant =
发送参数⽅(以下代码⽐较简单使⽤Kotlin编写):
1.需要传递对应的参数⽽后拼接到Uri后⾯,以下是例⼦
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
setContentView(R.layout.activity_main)
findViewById<Button>(R.id.bt1).setOnClickListener {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("open://st/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 void onCreate(@Nullable Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
//通过Deeplink 跳转获取参数
getIntentData(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
(Intent.ACTION_VIEW.equals(action)) { Uri data = getIntent().getData(); if (data != null) { String appId = QueryParameter("appId"); String token = QueryParameter("token"); String extend
= QueryParameter("extend"); String merchant = QueryParameter("merchant"); String agent = QueryParameter("agent"); } } }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论