美文网首页Android开发程序员
安卓学习:IntentFilter

安卓学习:IntentFilter

作者: lonamessi | 来源:发表于2017-11-30 23:11 被阅读0次

    IntentFilter是什么

    顾名思义IntentFilter:“意图过滤器”,主要用来过滤隐式意图。
    当用户做一些操作的时候,安卓系统会根据配置的“意图过滤器”,去寻找可以响应操作的组件来进行服务 。

    为什么用IntentFilter

    Activity有两种启动模式(此处不多说),一种是显示跳转,一种是隐式跳转。其中隐式跳转就是通过匹配设置的IntentFilter进行实现的。

    怎么用IntentFilter(IntentFilter的匹配原则)

    IntentFilter的过滤信息包含action 、category、data。只有同时匹配过滤列表中的action、category、data,才能成功,其中一个Activity可以有多个IntentFilter,一个Intent只要能匹配任何一组IntentFilter,就可以成功启动对应的Activity

    下面来想写讲解IntentFilter的匹配规则

    1.action 的匹配规则

    action其实就是一个字符串,其中系统定义了一些action,我们也可以自己定义自己的action。
    

    action的匹配规则是:Intent中的action是必须存(可以有多个action)在并且必须要和过滤规则中的其中一个action完全形同(包括大小写)

    2.category 的匹配规则

    category也是一个字符串,系统也定义了一些category,我们自己也可以定义自己的category。
    

    category和action的匹配原则不同,Intent中不一定含有category,如果含有category,那么所有的category必须要和过滤规则中的其中一个category相同。

    为什么不设置category也可以匹配?
    原因是系统在startActivity或者startActivityForResult的时候默认为Intent
    加上一个android.intent.category.DEAFAULT,所以必须在intent-filter中
    加上android.intent.category.DEFAULT这个category
    

    3.data的匹配规则

    data的匹配规则和action是一样的,只是data的结构比较复杂

    先来看一下整体的data结构

                  <data
                    android:host="www.baidu.com"
                    android:mimeType="text/abc"
                    android:path="/my"
                    android:port="8080"
                    android:scheme="http"></data>
    
    date有两部分构成:mimeType和URI。

    mimeType:(可以自己定义)结构形式是aaa/bb
    指媒体类型 例如: image/jpeg vided/* ...

    URI:相当于url 其结构形式:

         <scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]
    

    详细解释:

    Scheme:即URI的模式。如果URI中没有指定Scheme.那么整个URI无效。默认值为content 和 file。

    Host:URI的host。比如www.baidu.com。如果指定了scheme和port,path等其他参数,但是host未指定,那么整个URI无效;如果只指定了scheme,没有指定host和其他参数,URI也是无效的。可以这样理解:一个完整的URI :http://www.axe.com:500/profile/info 我将后面的port 和path“:500/profile/info ”去掉,这个URI还是有效。如果我单独将www.axe.com 拿出来那这个URI就无效了。

    Port:URI端口,当URI指定了scheme 和 host 参数时port参数才有意义。

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

    pathPrefix: 用来匹配路径的开头部分,拿上面的 Uri 来说,这里将 pathPrefix 设置为 /blog 就能进行匹配了;

    pathPattern: 用表达式来匹配整个路径。

    如果想匹配上述一开始提到的例子可以这么写:

        Intent intent = new Intent();
        intent.setAction("aaa");
        intent.setDataAndType(Uri.parse("http://www.baidu.com:8080/my"),"text/abc");
        startActivity(intent);
    

    相关文章

      网友评论

        本文标题:安卓学习:IntentFilter

        本文链接:https://www.haomeiwen.com/subject/gorjbxtx.html