概述

什么是 URL Scheme?

scheme, host, port, path, pathPrefix, pathPattern 是用来匹配 Intent 中的 Data Uri 的。具体规则如下:

  ==scheme://host:port/path or pathPrefix or pathPattern==

scheme://host:port/前面这几个属性(不包括path) 在data中要配置后面的属性,必须先配置前面的属性,不能有跨越,举个例子你要设置host=80,前面就必须要配置scheme=doumi,host=www.baidu.com 才可以

这里主要说的区别是 path、pathPrefix、pathPattern 之间的区别

  • ==path==用来匹配完整的路径,如:http://example.com/blog/abc.html,这里将 path 设置为 /blog/abc.html 才能够进行匹配;

    • ==pathPrefix== 用来匹配路径的开头部分,拿上面的 Uri 来说,这里将 pathPrefix 设置为 /blog 就能进行匹配了;
    • ==pathPattern== 用表达式来匹配整个路径,这里需要说下匹配符号与转义。
      匹配符号:
      ” 用来匹配0次或更多,如:“a” 可以匹配“a”、“aa”、“aaa”…
      “.” 用来匹配任意字符,如:“.” 可以匹配“a”、“b”,“c”…
      因此 “.*” 就是用来匹配任意字符0次或更多,如:“.*html” 可以匹配 “abchtml”、“chtml”,“html”,“sdf.html”…
      转义:
      因为当读取 Xml 的时候,“\” 是被当作转义字符的(当它被用作 pathPattern 转义之前),因此这里需要两次转义,读取 Xml 是一次,在 pathPattern 中使用又是一次。如:“” 这个字符就应该写成 “\”,“\” 这个字符就应该写成 “\\”。
如果我们想要匹配 http 以 “.pdf” 结尾的路径,使得别的程序想要打开网络 pdf 时,用户能够可以选择我们的程序进行下载查看。

我们可以将 scheme 设置为 “http”,pathPattern 设置为 “.*\.pdf”

当然因为我们可以在一个activity下写无数个data标签,只要一个满足就可以跳转了

android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。

URL Scheme应用场景:

客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用。通过指定的 URL 字段,可以让应用在被调起后直接打开某些特定页面,比如商品详情页、活动详情页等等。也可以执行某些指定动作,如完成支付等。也可以在应用内通过 html 页来直接调用显示 app 内的某个页面。综上URL Scheme使用场景大致分以下几种:
  • 服务器下发跳转路径,客户端根据服务器下发跳转路径跳转相应的页面
  • H5页面点击锚点,根据锚点具体跳转路径APP端跳转具体的页面
  • APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面
  • APP根据URL跳转到另外一个APP指定页面

URL Scheme协议格式:

先来个完整的URL Scheme协议格式:

xl://goods:8888/goodsDetail?goodsId=10011002
通过上面的路径 Scheme、Host、port、path、query全部包含,基本上平时使用路径就是这样子的。

  • xl代表该Scheme 协议名称
  • goods代表Scheme作用于哪个地址域
  • goodsDetail代表Scheme指定的页面
  • goodsId代表传递的参数
  • 8888代表该路径的端口号

1、想要app被外部链接吊起

首先我们的必须是在app里面的随便一个activity注册这个(最好是mainActivity才可以启动),当然也可以不是,我们可以在当前唤醒的activity里启动launchactivity。

<activity
            android:name=".GoodsDetailActivity"android:theme="@style/AppTheme"><!--要想在别的App上能成功调起App,必须添加intent过滤器--><intent-filter><!--协议部分,随便设置--><data android:scheme="xl" android:host="goods" android:path="/goodsDetail" android:port="8888"/><!--下面这几行也必须得设置--><category android:name="android.intent.category.DEFAULT"/><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.BROWSABLE"/></intent-filter></activity>

2、scheme的调用方式

(1)网页上:

<a href="xl://goods:8888/goodsDetail?goodsId=10011002">打开商品详情</a>

(2)原生的调用方式:

所以原生的调用我们可以在启动的activity通过getIntent()获取相应的数据

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

或者


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

备注:协议外面是可以套协议的,比如我们可以http://www.devdivcom.com/http://www.baidu.com/2.pdf

就是可以在动作的里面变成另外一个协议。

3、判断scheme是否有效

PackageManager packageManager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isValid = !activities.isEmpty();
if (isValid) {startActivity(intent);
}

4、获取到Intent后怎么独处scheme的各个部分的数据

因为我们的intent发送的是转换成uri的数据,我们通过uri自带的提取方法。

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);
}

Question:

1、如果不是原生的使用intent来调用,而是使用网页的a标签来调用,那么会数据是怎么传送的?

Android:scheme总结(包含data其他部分)相关推荐

  1. Android scheme使用

    URL Scheme 的作用 android中的scheme是一种页面内跳转协议. 通过定义自己的scheme协议,可以非常方便跳转app中的各个页面: 通过scheme协议,服务器可以定制化告诉Ap ...

  2. Android一键生成包含.dex的Jar及动态加载方案

    Android一键生成包含.dex的Jar及动态加载方案 背景:谈到动态加载相信很多小伙伴都会想到 热更新 及 动态加载dex 的技术,最近也因为项目重构的需求,折腾了下这方面的技术点,以前研究过但时 ...

  3. android在java下建立模块,Android Studio:如何在Android模块中包含Java模块?

    在Android工作室我有一个Android模块,我们称之为MyAndroid.我还有一个Java模块(不是独立的JAR,而是模块中的完整Java项目),我们称之为MyJava.Android Stu ...

  4. android uri跳转导航,android:scheme 通过uri跳转到APP应用指定Activity

    [实例简介] android:scheme 通过uri跳转到APP应用指定Activity [实例截图] [核心代码] 9a220ee4-08be-464b-a16e-dd9475dca846 └── ...

  5. Android Gson在Kotlin data class中的使用

    文章目录 Android Gson在Kotlin data class中的使用 基本使用 NEP 空指针异常问题 空指针异常产生的原因 空安全失效问题 字段全有默认值 字段部分有默认值 解决问题 使用 ...

  6. Android架构探究之Data Binding双向绑定

    Android架构探究之Data Binding双向绑定 0. 对Data Binding的基本使用和概念可阅读下面链接 1. 什么是双向绑定?双向绑定和单项绑定的区别? 2. 举例说明 editTe ...

  7. Android Scheme跳转协议 (基础)

    Android中的Scheme是一种页面跳转协议,和网站通过URL的形式访问一样,APP同样可以通过这种方式进行跳转,它可以很方便的满足我们在一些场景中的需求: 假若遇到一个这个需求,h5想跳转到ap ...

  8. Android Scheme 跳转

    Android Scheme跳转如下: String scheme = "alipayqr://platformapi/startapp?saId=20000056"; try { ...

  9. Android 打包aar包含第三方aar 实践

    Android 打包aar包含第三方aar 因项目需要,打包aar包含第三方aar,如果直接对module进行打包会产生一些问题. * What went wrong: Direct local .a ...

最新文章

  1. Fastcgi是什么
  2. UA MATH567 高维统计专题1 稀疏信号及其恢复2 用L1-norm作为L0-norm的convex relexation
  3. 论文阅读:Deep Filter Banks for Texture Recognition and Segmentation
  4. Android 内存管理 Memory Leak OOM 分析
  5. 计算机网络基础期中测试题,计算机网络基础期末考试试题
  6. ES集群新增节点无法加入集群 timed out while waiting for initial discovery state - timeout: 30s
  7. 32利用文件系统保存数据_网易技术实践|Docker文件系统实战
  8. 4K视频直播与点播系统的搭建与体验
  9. 人脸识别5.2- insightface人脸3d关键点检测,人脸68个特征点、106个特征点;人脸姿态角Pitch、Yaw、Roll、
  10. [转载]MTK入门教程
  11. 1194: 总成绩排序(结构体专题)
  12. 【Java】为什么不推荐程序员去外包公司?
  13. 【论文笔记】Self-paced Contrastive Learning with Hybrid Memory for Domain Adaptive Object Re-ID
  14. Excel如何快速完成图片查找?
  15. 终身免费!微软数据恢复工具,界面版体验
  16. 高考数学计算机题,高考数学题型全归纳汇总
  17. 科学计算机程序 字表处理软件都是,计算机应用基础知识--1
  18. matlab中读取blf数据路径,需求可拆分车辆路径优化模型与BLF-GA算法设计
  19. 收藏几个好用的webservice
  20. 51单片机汇编学习例程(17)——KeyPad4X4篇

热门文章

  1. excel批量文件改名批量加后缀
  2. 科大讯飞刘庆峰:AI要改变世界,算法、大数据、行业专家缺一不可
  3. 给没有软件测试经验的应届生的建议,看完让你豁然开朗!
  4. 分享个好用的在线翻译器拍照扫一扫方法
  5. 漫画 | 芯片战争50年,Intel为什么干不掉AMD?
  6. Python中Numpy中省略号的作用
  7. 为什么你应聘不上或试用期被开?
  8. 剖析拒绝服务攻击-SYN拒绝服务(转)
  9. ios 仿京东商品属性选择界面
  10. 汇编指令与Intrinsics指令的对应关系汇总