利用URL Scheme打开APP并传递数据
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
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- <intent-filter>
- <action android:name="android.intent.action.VIEW"/>
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.BROWSABLE" />
- <data android:scheme="tlqp" android:host="my.app" android:pathPrefix="/openwith" />
- </intent-filter>
在AndroidManifest.xml文件,添加以上代码(根据情况适当修改),这里需要注意的地方是,不能再上面的Intent-filter里面添加相关代码,因为那里面存在MAIN和LAUNCHER相关代码,混在一起的话,会造成App图标丢失的情况。需要新建一个intent-filter,然后把代码添加进去即可。
5、获取URL附带的参数
- Uri uri = getIntent().getData();
- if (uri != null) {
- // 完整的url信息
- String url = uri.toString();
- Log.e(TAG, "url: " + uri);
- // scheme部分
- String scheme = uri.getScheme();
- Log.e(TAG, "scheme: " + scheme);
- // host部分
- String host = uri.getHost();
- Log.e(TAG, "host: " + host);
- //port部分
- int port = uri.getPort();
- Log.e(TAG, "host: " + port);
- // 访问路劲
- String path = uri.getPath();
- Log.e(TAG, "path: " + path);
- List<String> pathSegments = uri.getPathSegments();
- // Query部分
- String query = uri.getQuery();
- Log.e(TAG, "query: " + query);
- //获取指定参数值
- String goodsId = uri.getQueryParameter("goodsId");
- Log.e(TAG, "goodsId: " + goodsId);
- }
6、打开app的方式
可以把URL写进HTML里面通过点击网页链接打开APP
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Insert title here</title>
- </head>
- <body>
- <a href="tlqp://my.app/openwith?roomID=203518">打开app</a><br/>
- </body>
- </html>
原生调用方式:
- Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));
- startActivity(intent);
后记:目前有一部分浏览器是打不开App的,例如;qq浏览器,UC浏览器这些,百度浏览器也有可能打不开,原因是这些浏览器都在你的Scheme前面加上了http://,从而造成了scheme失效。还有一点需要注意,就是上面说到的url里面的path这个参数,如果你的path包含了其他的path,那么你调用这个包含其他path的path,可能会在打开第一个path对应的页面的同时也会打开被包含path的那个页面,有点绕口么~举个栗子吧
利用URL Scheme打开APP并传递数据的更多相关文章
- 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用
[源码下载] 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用 作者:weba ...
- Url Scheme实现APP间通信、分享
代码地址如下:http://www.demodashi.com/demo/12748.html 简介: URL Scheme就是一个可以让app相互之间可以跳转的对外接口.通过给APP定义一个唯一的U ...
- URL Scheme吊起app实现另外一种登录方式
https://developer.apple.com/library/content/featuredarticles/iPhoneURLScheme_Reference/Introduction/ ...
- iOS通过URL Scheme启动app(收集了常用的app的URL Scheme)
URL Scheme不仅可以打开其他的app,当然你也能为自己的app设置URL Scheme 1.如何设置给app设置URL Scheme 添加URL types字段数组 设置URL identif ...
- 多个App间传递数据
平台:Android两个App:A,B:需求:在A中点击一个按钮后,启动B并把数据从A传递到B: 代码: App A: MainActivity.java中添加: Button btn2 = (But ...
- 小程序App.js 传递数据给实例(app异步数据问题)
在最开始初始化的时候,都会触发app.js 这个里面的onload生命方法, 在这个方法里面我们可以获取之前的存储数据/异步请求等等操作, 但是这些操作一般都是需要稍许时间.也就是说在其他界面加载结束 ...
- IOS开发---菜鸟学习之路--(十八)-利用代理实现向上一级页面传递数据
其实我一开始是想实现微信的修改个人信息那样的效果 就是点击昵称,然后跳转到另外一个页面输入信息 但是细想发现微信的话应该是修改完一个信息后就保存了 而我做的项目可能需要输入多个数据之后再点击提交的. ...
- 通过注册的URL Scheme向目标APP传递参数
通过注册的URL Scheme向目标APP传递参数 通过URL Scheme启动APP很简单就可以做到,但有时候我们想在启动APP的时候传递一些参数,这个时候我们就可以通过URL Scheme自定义U ...
- WebApp JS 打开 app
产品需求:分享出去的链接比如到微信朋友圈,微博的H5页面,添加一个按钮 open App 用来打开并启动自己公司的APP (如果当前手机已经安装自己公司的APP) 废话少说直接上代码: <inp ...
随机推荐
- Android 控件在布局中按比例放置[转]
转自:http://netsky1990.blog.51cto.com/2220666/997452 在Android开发中常用到线性布局LinearLayout对界面进行具体的创建,其中 ...
- ssh关于含有外键的传值中无法识别正确的action的原因和解决办法
在含有外键的表中,要保存一个值到这个外键时:逻辑思路:需要先将jsp页面的值传到相应的action中,在这个action中需要引入这个外键的实体层和DAO层(DAO层只需set方法),在执行函数中对于 ...
- delphi Table切换控件顺序问题
delphi Table切换控件顺序问题 Tagorder的值就是确定Table键切换顺序的 以上做法只能解决同一类型的多个控件(如Edit1,edit2....)显示顺序问题 假如有不同类型的控件如 ...
- CentOS下Docker与.netcore(一) 之 安装
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...
- mysql on duplicate key update 和 insert ignore into
on duplicate key update <insert id="insert" parameterType="Plan"> insert i ...
- TOMCAT在POST方法提交参数丢失问题
最近写程序发现post参数接收不到了,jdk,eclipse,jar包,换了多次都不行,后来看到网上一篇文章: 随后设置Tomcat中POST方式提交数据大小: maxPostSize="0 ...
- [agc007f] Shik and Copying String 模拟神题
Description "全"在十分愉快打工,第0天,给了他一个仅有小写字母构成的长度为N的字符串S0,在之后的第i天里,"全"的工作是将Si−1复制一份到 ...
- BZOJ 4817: [Sdoi2017]树点涂色(LCT+树剖+线段树)
题目描述 Bob有一棵 nn 个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. Bob ...
- php面向对象编程_1
1, php面向对象编程的三大特征: (1) 封装性,封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法)才能对数据进行操作. (2) 继承 ...
- php 扩展 debug问题
php安装时为debug模式 ./configure --prefix=/usr/local/php7.1.6-debug --with-curl --with-pcre-regex --enabl ...