前段时间花了时间看了《第一行代码》,最近因为公司出差太多,学习进度滞后很多;我看这本书的目的更多的还是扩展一下知识宽度,对于作者的很多深入理解的分析可能不会纠结太多,毕竟这本书本定义为进阶书籍;不管如何,第一件事也是最重要的事,感谢任玉刚前辈对于自己知识和经验的奉献,为我们这些菜鸟了提供很多学习资源与学习方法。对于这本书,我初步估计会写50篇的学习总结博客,为自己以后的回顾做一个充分的准备,如果能帮到别人,也是倍感荣幸。
本篇主要介绍针对使用隐式意图打开活动的相关知识,当然广播接受者和服务也是同理,但是因为显示意图简单且优先级较高,尤其是在打开服务的时候,是推荐使用显式开启的。不管怎么样,今天我们主要学习IntentFilter的匹配规则
1,知识点
(1)IntentFilter的组成
其主要有三个部分,action,category以及data,如下所示:
示例:
<activity android:name=".ActionMatchTestAct"> <intent-filter> <action android:name="android.intent.action.VIEW"></action> <action android:name="android.intent.action.ANSWER"></action> <category android:name="android.intent.category.DEFAULT"></category> <category android:name="android.intent.category.ALTERNATIVE"></category> <data android:mimeType="image/*"></data> <data android:scheme="content"></data> </intent-filter> </activity>
(2)action匹配规则
action的值有系统值和自定义值,根据需要自己选用,但是在使用隐式意图的时候,必须注意两点,就是action必须有至少一个,category的系统默认值android.intent.category.DEFAULT必须要有;其匹配的规则是:
因为一个intent只能设置一个action,后面设置的值会覆盖前面设置的值,所以intent设置的action必须匹配上活动当中配置的多个action当中的一个才行,配置示例如下:
<activity android:name=".ActionMatchTest.ActionMatchTestAct"> <intent-filter> <action android:name="hfut.com.why" /> <action android:name="hfut.com.jr" /> <category android:name="android.intent.category.DEFAULT"></category> </intent-filter> </activity>
(3)category匹配规则
category也用系统值和自定义值之分,在上面也说了,想通过隐式意图打开一个活动,那么该活动在配置文件中必须要配上系统默认值android.intent.category.DEFAULT;其匹配规则和action有一点区别,因为一个隐式意图可以添加多个category;所以添加的每一个category必须要是配置文件当中的,如果不添加,则默认匹配系统默认值,配置示例:
<activity android:name=".CategoryMatchTest.CategoryMatchTestAct"> <intent-filter> <action android:name="hfut.com.category"></action> <category android:name="hfut.com.why"></category> <category android:name="android.intent.category.APP_MAPS"></category> <category android:name="android.intent.category.DEFAULT"></category> <!--<category android:name="android.intent.category.APP_MAPS"></category>--> </intent-filter> </activity>
(4)data匹配规则
data特殊一点,先介绍其组成:
(a)URI:
结构:<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]
示例:http://www.baidu.com:80/search/info
scheme:URI模式,是URI其他参数基础,没有它其他无意义,如http,content,file等
Host:主机名
Port:端口号
Path、pathPattern,pathPrefix表示路径信息
(b)mimeType:
媒体类型,比如image/png,video/mp4等等,其匹配规则和action一样,配置的示例如下:
<activity android:name=".DataMatchTest.DataMatchTestAct" > <intent-filter> <action android:name="hfut.com.data"> </action> <category android:name="android.intent.category.DEFAULT"> </category> <data android:mimeType="image/*" android:scheme="content" android:host="www.why.com"></data> <data android:mimeType="video/*" android:scheme="http" android:host="www.jr.com"></data> </intent-filter> </activity>
2,示例代码
由于较多,这里就不复制粘贴了,点击下载源码
3,运行效果图
这里简单的选取部分示例运行的图片供参考