在 AndroidManifest.xml中定义scheme协议,如下
<activity
android:name="com.test.ForWebAcitivity"
android:noHistory="true"
android:screenOrientation="user"
android:theme="@style/VideoStyle">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<!--app可以被其他app唤起必须添加-->
<category android:name="android.intent.category.BROWSABLE" />
<!--app的scheme协议如下:apps://web2app:80000/test?
scheme="fanxun:协议名称
host="web2app:主机名称
path="/test :路径
path还可以替换为:pathPrefix和pathPattern。pathPrefix:只有路径的开头匹配pathPrefix中的内容即可。
pathPattern:内容是正则表达式,路径匹配其规则即可。
-->
<data
android:path="/test"
android:port="80000"
android:host="web2app"
android:scheme="fanxun"
</intent-filter>
</activity>
- 匹配符号:
- “ * ” 用来匹配0次或更多,如:“a*” 可以匹配“a”、“aa”、“aaa”…
- “.” 用来匹配任意字符,如:“.” 可以匹配“a”、“b”,“c”…
- “.* ” 就是用来匹配任意字符0次或更多,如:“.*html” 可以匹配 “abchtml”、“chtml”,“html”,“sdf.html”…
- 转义:因为当读取 Xml 的时候,“\” 是被当作转义字符的(当它被用作 pathPattern 转义之前),因此这里需要两次转义,读取 Xml 是一次,在 pathPattern 中使用又是一次。如:“” 这个字符就应该写成 “\”,“\” 这个字符就应该写成 “\\”。
在ForWebAcitivity类中获取传递过来的数据进行分析处理
- 对于链接为( apps://web2app:80000/test?userId=6342ba83-d37d-47a5-b629-8c500d52a374&type=3&typeId=cc232ff8-a09e-4a1c-8217-5a83e5496874) 处理如下
Uri uri = getIntent().getData();
String userId = uri.getQueryParameter("userId");
String type = uri.getQueryParameter("type");
String typeId = uri.getQueryParameter("typeId");
switch (type) {
...
}
Uri,UR,URL的区别
- URI类代表了一个URI(这个URI不是类,而是其本来的意义:通用资源标志符——Uniform Resource Identifier)实例。
- Uri类是一个不可改变的URI引用,包括一个URI和一些碎片,URI跟在“#”后面。建立并且转换URI引用。而且Uri类对无效的行为不敏感,对于无效的输入没有定义相应的行为,如果没有另外制定,它将返回垃圾而不是抛出一个异常。Uri是Android开发的,扩展了JAVA中URI的一些功能来特定的适用于Android开发,所以大家在开发时,只使用Android 提供的Uri即可;
- Resource Locator (URL) − 除了标识资源可用的位置之外,URI的一个子集描述了访问该资源的主要机制。
- URL和URI的格式如:scheme:[//authority][/path][?query][#fragment]
- scheme − 对于 URL, 是访问资源的协议名称;对其他URI,是分配标识符的规范的名称
- authority − 可选的组成用户授权信息部分,主机及端口(可选)
- path − 用于在scheme和authority内标识资源
- query − 与路径一起的附加数据用于标识资源。对于url是查询字符串
- fragment − 资源特定部分的可选标识符
- Uri作为URI引用 ,封装了获取上述内容的方法。
- URL和URI转换
URI u = URI.create("http://somehost:80/path?thequery");
//还可以这样初始化URLI
URI uri1 = new URI("http://somehost:80/path?thequery");
URL url = new URL("http://somehost:80/path?thequery");
u.toURL();
url.toURI();