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

接收参数方:

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

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.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>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!--url跳转格式为:open://app.test.com/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="app.test.com"
android:pathPrefix="/game"
/>
</intent-filter> </activity>
</application> </manifest>

通过三个字段生成一个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后面,以下是例子

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<Button>(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 void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过Deeplink 跳转获取参数
getIntentData(getIntent()); } @Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
getIntentData(intent);
} private void getIntentData(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");
}
} }

Android通过DeepLink方式跳转其他App传递参数的更多相关文章

  1. 通过注册的URL Scheme向目标APP传递参数

    通过注册的URL Scheme向目标APP传递参数 通过URL Scheme启动APP很简单就可以做到,但有时候我们想在启动APP的时候传递一些参数,这个时候我们就可以通过URL Scheme自定义U ...

  2. android 通过子线程跳转activity并传递内容

    android 子线程中不能够更新ui已经根深蒂固在我的脑海里,当时也就理所当然的觉得子线程中也是不能够进行界面的跳转的,可是在后来的学习中,发现居然是能够通过子线程来进行activity的跳转时,立 ...

  3. 跳转页面,传递参数——android

    android 跳转页面并传递对象(实体类)——项目中是集港收货类 网上资料:两种传递方法Serializable,parcelable 优劣比较:Serializable数据更持久化,网络传输或数据 ...

  4. Android activity之间的跳转和数据传递

    1.Activity之间的跳转 并且 传递数据 A Activity进行的操作 Intent intent = new Intent(context, B.class); intent.putExtr ...

  5. Android 安卓实现页面相互跳转并相互传递参数

    一.对于两个页面之间相互传值,跳转的时候我们使用 startActivityForResult(intent,0),而不是startActivity(intent) 这个方法 第一个页面中在触发跳转的 ...

  6. 微信小程序 页面跳转navigator与传递参数

    页面之间跳转使用 navigator标签,wx.navigateTo ,wx.redirectTo 1.URL就是跳转的页面路径.上面代码中就是navigator目录下的navigator页面,tit ...

  7. [转载]LinkButton跳转页面及传递参数

    在DataList中使用LinkButton按钮(LinkButtonDelete),该按钮用于链接跳转到删除页面.在模板中双击该按钮,跳转到.cs页面.问题是我们如何获得该条信息的ID,如果不知道I ...

  8. Angularjs 跳转页面并传递参数的方法总结

    http://www.zhihu.com/question/33565135 http://www.codeproject.com/Articles/1073780/ASP-NET-MVC-CRUD- ...

  9. iOS 跳转到 App Store 下载评分页面

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

随机推荐

  1. Hadoop通过路径和和链接访问HDFS

    如果既想在Hadoop服务器本地可以通过绝对路径如"/user/hadoop"方式访问hdfs,也想通过"hdfs://local host:9000/user/hado ...

  2. Mybatis学习(3)关于mybatis全局配置文件SqlMapConfig.xml

    比如针对我这个项目的mybatis全局配置文件SqlMapConfig.xml做一些说明: <?xml version="1.0" encoding="UTF-8& ...

  3. shell 10流程控制

    if 判断 if #shell #!/bin/sh a=5 if [[ $a > 3 ]];then echo "$a>3" fi #写成一行 if [[ $a < ...

  4. java study2

    Intellj小技巧 数组 1.java数组元素类型是唯一的,即一个数组只能存储一种数据类型的数据,而不能存储多种数据类型的数据. 2.java数组的长度,一旦初始化完成,控件就被固定,即数组的长度将 ...

  5. 挂载本地ISO

    http://www.linuxidc.com/Linux/2017-03/142087.htm 挂载本地ISO mount -o loop /home/iso/RHEL-server-7.0-x86 ...

  6. 【基础知识五】神经网络NN

    常用模型:BP神经网络,RBF神经网络 一.神经元模型 |  连接权,阈值,激活函数 1. 输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值将与神经元的阈值进行比较, ...

  7. 为solr增加用户验证

    添加此功能主要是为了增加solr服务器的安全性,不能随便让人访问. 1.      在tomcat的F:\Tomcat 6.0.26_solr\conf\tomcat-users.xml添加用户角色并 ...

  8. angularjs探秘<一>认识angularjs

    首先聊聊angularjs是啥. 首先AngularJS 是一个 JavaScript 框架.(PS:其实就是外部引用的js文件) 所以AngularJS的使用依然是外部引用js文件. 附上引用地址 ...

  9. 40. Linux下7-zip解压到当前目录的命令

    7z x test.zip 解压到当前目录下,但保留原来的目录结构 7z e test.zip 解压到当前目录下,不保留原来的目录结构

  10. java二维数组的长度

    //多少行 a.length //多少列 a[i].length