https://blog.csdn.net/u013517637/article/details/55251421

利用外部链接打开APP并传递一些附带信息是现在很多APP都有的功能,我在这把这部分的知识记录一下。

1、什么是URL Scheme?

android中的scheme是一种页面内跳转协议,是一种非常好的机制,通过自己在AndroidManifest.xml文件里面定义自己的scheme协议,可以非常方便的跳转到App的各个页面。通过scheme协议,甚至可以跳转到App的某个页面,可以通过直接输入URL进行跳转,也可以把URL写进HTML页面进行跳转。

2、实现的大致流程

我们手机的APP可以向操作系统注册一个URL Scheme,该scheme用于从浏览器或其他应用中启动本应用。

3、URL Scheme的协议格式

tlqp://my.app/openwith?roomID=123456

scheme:tlqp 代表Scheme的协议名称(必须)

host:my.app 代表host

path:openwith 代表path

query:roomID=123456 代表URL传递的值

4、设置URL Scheme

  1. <intent-filter>
  2. <action android:name="android.intent.action.MAIN" />
  3. <category android:name="android.intent.category.LAUNCHER" />
  4. </intent-filter>
  5. <intent-filter>
  6. <action android:name="android.intent.action.VIEW"/>
  7. <category android:name="android.intent.category.DEFAULT" />
  8. <category android:name="android.intent.category.BROWSABLE" />
  9. <data android:scheme="tlqp" android:host="my.app" android:pathPrefix="/openwith" />
  10. </intent-filter>

在AndroidManifest.xml文件,添加以上代码(根据情况适当修改),这里需要注意的地方是,不能再上面的Intent-filter里面添加相关代码,因为那里面存在MAIN和LAUNCHER相关代码,混在一起的话,会造成App图标丢失的情况。需要新建一个intent-filter,然后把代码添加进去即可。

5、获取URL附带的参数

  1. Uri uri = getIntent().getData();
  2. if (uri != null) {
  3. // 完整的url信息
  4. String url = uri.toString();
  5. Log.e(TAG, "url: " + uri);
  6. // scheme部分
  7. String scheme = uri.getScheme();
  8. Log.e(TAG, "scheme: " + scheme);
  9. // host部分
  10. String host = uri.getHost();
  11. Log.e(TAG, "host: " + host);
  12. //port部分
  13. int port = uri.getPort();
  14. Log.e(TAG, "host: " + port);
  15. // 访问路劲
  16. String path = uri.getPath();
  17. Log.e(TAG, "path: " + path);
  18. List<String> pathSegments = uri.getPathSegments();
  19. // Query部分
  20. String query = uri.getQuery();
  21. Log.e(TAG, "query: " + query);
  22. //获取指定参数值
  23. String goodsId = uri.getQueryParameter("goodsId");
  24. Log.e(TAG, "goodsId: " + goodsId);
  25. }

6、打开app的方式

可以把URL写进HTML里面通过点击网页链接打开APP

  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4. <title>Insert title here</title>
  5. </head>
  6. <body>
  7. <a href="tlqp://my.app/openwith?roomID=203518">打开app</a><br/>
  8. </body>
  9. </html>

原生调用方式:

  1. Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));
  2. startActivity(intent);

后记:目前有一部分浏览器是打不开App的,例如;qq浏览器,UC浏览器这些,百度浏览器也有可能打不开,原因是这些浏览器都在你的Scheme前面加上了http://,从而造成了scheme失效。还有一点需要注意,就是上面说到的url里面的path这个参数,如果你的path包含了其他的path,那么你调用这个包含其他path的path,可能会在打开第一个path对应的页面的同时也会打开被包含path的那个页面,有点绕口么~举个栗子吧

利用URL Scheme打开APP并传递数据的更多相关文章

  1. 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用

    [源码下载] 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用 作者:weba ...

  2. Url Scheme实现APP间通信、分享

    代码地址如下:http://www.demodashi.com/demo/12748.html 简介: URL Scheme就是一个可以让app相互之间可以跳转的对外接口.通过给APP定义一个唯一的U ...

  3. URL Scheme吊起app实现另外一种登录方式

    https://developer.apple.com/library/content/featuredarticles/iPhoneURLScheme_Reference/Introduction/ ...

  4. iOS通过URL Scheme启动app(收集了常用的app的URL Scheme)

    URL Scheme不仅可以打开其他的app,当然你也能为自己的app设置URL Scheme 1.如何设置给app设置URL Scheme 添加URL types字段数组 设置URL identif ...

  5. 多个App间传递数据

    平台:Android两个App:A,B:需求:在A中点击一个按钮后,启动B并把数据从A传递到B: 代码: App A: MainActivity.java中添加: Button btn2 = (But ...

  6. 小程序App.js 传递数据给实例(app异步数据问题)

    在最开始初始化的时候,都会触发app.js 这个里面的onload生命方法, 在这个方法里面我们可以获取之前的存储数据/异步请求等等操作, 但是这些操作一般都是需要稍许时间.也就是说在其他界面加载结束 ...

  7. IOS开发---菜鸟学习之路--(十八)-利用代理实现向上一级页面传递数据

    其实我一开始是想实现微信的修改个人信息那样的效果 就是点击昵称,然后跳转到另外一个页面输入信息 但是细想发现微信的话应该是修改完一个信息后就保存了 而我做的项目可能需要输入多个数据之后再点击提交的. ...

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

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

  9. WebApp JS 打开 app

    产品需求:分享出去的链接比如到微信朋友圈,微博的H5页面,添加一个按钮 open App 用来打开并启动自己公司的APP (如果当前手机已经安装自己公司的APP) 废话少说直接上代码: <inp ...

随机推荐

  1. Android 控件在布局中按比例放置[转]

    转自:http://netsky1990.blog.51cto.com/2220666/997452       在Android开发中常用到线性布局LinearLayout对界面进行具体的创建,其中 ...

  2. ssh关于含有外键的传值中无法识别正确的action的原因和解决办法

    在含有外键的表中,要保存一个值到这个外键时:逻辑思路:需要先将jsp页面的值传到相应的action中,在这个action中需要引入这个外键的实体层和DAO层(DAO层只需set方法),在执行函数中对于 ...

  3. delphi Table切换控件顺序问题

    delphi Table切换控件顺序问题 Tagorder的值就是确定Table键切换顺序的 以上做法只能解决同一类型的多个控件(如Edit1,edit2....)显示顺序问题 假如有不同类型的控件如 ...

  4. CentOS下Docker与.netcore(一) 之 安装

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  5. mysql on duplicate key update 和 insert ignore into

    on duplicate key update <insert id="insert" parameterType="Plan"> insert i ...

  6. TOMCAT在POST方法提交参数丢失问题

    最近写程序发现post参数接收不到了,jdk,eclipse,jar包,换了多次都不行,后来看到网上一篇文章: 随后设置Tomcat中POST方式提交数据大小: maxPostSize="0 ...

  7. [agc007f] Shik and Copying String 模拟神题

    Description ​ "全"在十分愉快打工,第0天,给了他一个仅有小写字母构成的长度为N的字符串S0,在之后的第i天里,"全"的工作是将Si−1复制一份到 ...

  8. BZOJ 4817: [Sdoi2017]树点涂色(LCT+树剖+线段树)

    题目描述 Bob有一棵 nn 个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. Bob ...

  9. php面向对象编程_1

    1, php面向对象编程的三大特征: (1) 封装性,封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法)才能对数据进行操作. (2) 继承 ...

  10. php 扩展 debug问题

    php安装时为debug模式 ./configure  --prefix=/usr/local/php7.1.6-debug --with-curl --with-pcre-regex --enabl ...