美文网首页
Android InterFilter的匹配规则

Android InterFilter的匹配规则

作者: MKiDlufi | 来源:发表于2017-05-02 20:22 被阅读0次

    以Activity为例,Android的Activity的InterFilter一共有三种:action、category、data。我们用Intent隐式启动时需要根据Activity的这三种标签进行匹配。Service与BroadcastReceiver同理。

    匹配规则

    一.action

    action的匹配规则分为两种情况:
    1.没有data标签,或者说只有action和category标签时,action要求Intent的action必须存在且和<intent-fileter>中的其中一个action相同。
    2.有data标签时,Intent只需要指定data标签(startActivity或startActivityForResult时系统默认加上android.intent.category.DEFAULT标签,相当于有category和data两种标签)即可,无需指定action,当然指定也没问题。

    二.category

    1.需要隐式启动的Activity必须在<intent-fileter>中加上android.intent.category.DEFAULT标签;
    2.Intent只加category标签启动Activity会报错,必须配合action或者data使用;
    3.Intent若未添加category标签,startActivity或者startActivityForResult时会默认加上android.intent.category.DEFAULT标签。
    4.Intent若含有category,则所有的category都必须与<intent-fileter>中的其中一个相同。

    三.data

    1.Activity若含有data标签,则Intent必须要有与之匹配的data。
    2.data的语法:

    <data android:scheme="string"
              android:host="string"
              android:port="string"
              android:path="string"
              android:pathPattern="string"
              android:pathPrefix="string"
              android:mimeType="string"/>
    

    Scheme:URI的模式。
    Host:URI主机名
    Port:URI端口号
    Path、pathPattern、pathPrefix:表述路径信息,path标识完整的路径信息;pathPattern也表示完整路径信息,但是它里面可以包含通配符"",""表示0个或多个任意字符;pathPrefix表示路径的前缀信息。
    其中string代表字符串,如android:mimeType="image/*",data标签可以只有android:mimeType。如:

    <data android:mimeType="image/*"/>
    

    此时虽然没有指定URI,但是Intent中的URI默认是content或者file才能匹配。

    相关文章

      网友评论

          本文标题:Android InterFilter的匹配规则

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