《Android开发艺术探索》学习总结3 IntentFilter过滤规则

       前段时间花了时间看了《第一行代码》,最近因为公司出差太多,学习进度滞后很多;我看这本书的目的更多的还是扩展一下知识宽度,对于作者的很多深入理解的分析可能不会纠结太多,毕竟这本书本定义为进阶书籍;不管如何,第一件事也是最重要的事,感谢任玉刚前辈对于自己知识和经验的奉献,为我们这些菜鸟了提供很多学习资源与学习方法。对于这本书,我初步估计会写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,运行效果图

这里简单的选取部分示例运行的图片供参考







猜你喜欢

转载自blog.csdn.net/hfut_why/article/details/80554689
今日推荐