Android InterFilter的匹配规则

以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才能匹配。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要。 一、什么是Intent...
    困惑困惑困惑阅读 5,486评论 0 0
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,855评论 0 17
  • Intent简介Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的...
    Android_lml阅读 4,538评论 1 7
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,957评论 25 709
  • 读大学的价值也许在于,能认识未来几十年最重要的朋友,能分辨哪些人自己一辈子都不会交往,能集中解决很多困惑,从而形成...
    小小梦想日记阅读 3,607评论 0 1

友情链接更多精彩内容