intent-filter 之 data
来源:互联网 发布:聚翔网络 编辑:程序博客网 时间:2024/05/01 18:54
转自http://www.cnblogs.com/newcj/archive/2011/08/11/2135094.html
intent-filter 之 data 「scheme, host, port, mimeType, path, pathPrefix, pathPattern」
之前一直搞不很明白 AndroidManifest.xml 中 activity 标签下的 intent-filter 中 data 标签的属性含义,今天认真看了 Dev Guide,又在网上查询了大量相关资料,现把 data 标签中的属性含义做一个总结。
一、定义
scheme, host, port, path, pathPrefix, pathPattern 是用来匹配 Intent 中的 Data Uri 的。具体规则如下:
scheme://host:port/pathorpathPrefixorpathPattern
这里需要注意的是这里的 scheme 不是schema,也许你记得 xmlns:android="http://schemas.android.com/apk/res/android" 这段声明,你就会想起其中的 schema (至少我是这样想到了...- -!),但这里的 scheme 不是 schema。虽然在写 AndroidManifest.xml 的时候,有智能提示,但是希望大家还是能注意到。
上面那句最后的 “pathorpathPrefixorpathPattern” 是指后面的 path 验证可以使用 data 属性中的 android:path、android:pathPrefix 或 pathPattern,你可以添加任意个 data 标签,由于是 “or” ,因此,只要其中任意一个 data 匹配,系统就会选择你的 Activity 启动,当然,如果别的 Activity 也有相同的 data 标签,系统就会给用户弹出一个 Chooser Dialog。
mimeType也是是用来匹配 Intent 的。比如,当你使用 Intent.setType("text/plain") ,那么系统将会匹配到所有注册 android:mimeType="text/plain" 的 Activity,想获取更多有关 mimeType 的知识请参考:【转】备份:Android 常用 mimeType 表。
这里需要十分注意的是 Intent.setType(), Intent.setData,Intent.setDataAndType() 这三个方法!
- setType 调用后设置 mimeType,然后将 data 置为 null;
- setData 调用后设置 data,然后将 mimeType 置为 null;
- setDataAndType 调用后才会同时设置 data 与 mimeType。
- 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”...
1 <intent-filter>2 <action android:name="android.intent.action.VIEW"></action>3 <category android:name="android.intent.category.DEFAULT"></category>4 <data android:scheme="http" android:pathPattern=".*\\.pdf"></data>5 </intent-filter>
如果你只想处理某个站点的 pdf,那么在 data 标签里增加 android:host="yoursite.com" 则只会匹配 http://yoursite.com/xxx/xxx.pdf,但这不会匹配 www.yoursite.com,如果你也想匹配这个站点的话,你就需要再添加一个 data 标签,除了 android:host 改为 “www.yoursite.com” 其他都一样。
1 <intent-filter>2 <action android:name="android.intent.action.SEND" />3 <category android:name="android.intent.category.DEFAULT" />4 <data mimeType="*/*" />5 </intent-filter>
这里设置 category 的原因是,创建的 Intent 的实例默认 category 就包含了 Intent.CATEGORY_DEFAULT ,google 这样做的原因是为了让这个 Intent 始终有一个 category。
例子3:如果我们做的是一个音乐播放软件,当文件浏览器打开某音乐文件的时候,使我们的应用能够出现在选择框里?
1 <intent-filter>2 <action android:name="android.intent.action.VIEW" />3 <category android:name="android.intent.category.DEFAULT" />4 <data android:mimeType="audio/*" />5 </intent-filter>
- intent-filter 之 data
- intent-filter 之 data
- intent-filter 之 data
- intent-filter 之 data讲解
- intent-filter 之 data (保存)
- intent-filter data详解
- intent-filter的data属性详述
- intent-filter的data属性详述
- Data、Type属性与intent-filter配置
- intent-filter的data属性详述
- 【IntentFilter】 intent-filter的data属性详述
- intent-filter的data属性详述
- intent-filter的data属性详述
- Data、Type属性与intent-filter配置
- 【Android】intent-filter里data匹配分析
- intent-filter的data属性详述
- intent-filter 之 data 「scheme, host, port, mimeType, path, pathPrefix, pathPattern」
- intent-filter 之 data 「scheme, host, port, mimeType, path, pathPrefix, pathPattern」
- 树与二叉树
- Mac笔记( 二) Mac OS X 10.10 安装与配置PhoneGap
- 二叉树与森林的转换
- Js判断键盘按键
- 解决问题:“System Program Problem Detected” Messages From Ubuntu
- intent-filter 之 data
- java第六讲随笔
- CGRect常见用法和几个 CGRect 函数
- JMeter基础之一 一个简单的性能测试
- Codeforces Round #279 (Div. 2)
- java第七讲随笔
- jquery file upload 报错:Cannot read property 'nodeName' of undefined
- Fragment 和 FragmentActivity的使用
- Android init源代码分析(1)概要分析