Android 中IntentFilter的匹配规则实例详解

发布时间 - 2026-01-11 03:10:41    点击率:

IntentFilter的匹配规则

IntentFilter的使用

假如我们要隐式启动一个Activity我们需要成功匹配activity中的任意一个intent-filter。如果要成功匹配该intent-filter我们需要完全匹配该intent-filter中的 action、category、data。

示例:

<activity android:name=".MainActivity">
  <intent-filter>
   <action android:name="com.blueberry.action"></action>
   <action android:name="com.blueberry.action1"></action>

   <category android:name="com.blueberry.category"></category>
   <category android:name="android.intent.category.DEFAULT"></category>

   <data android:mimeType="text/plain"></data>
   </intent-filter>
</activity>

如果activity的过滤列表如上配置,我们在设置intent的参数时需要同时满足action、category、data才算匹配成功,只有完全匹配才能成功启动activity。(如果是BroadcastReceiver的话,只需要满足action或data类型任意一个即可)。

action的匹配规则

action是一个字符串,系统预定义了一些action,同时我们也可以自己定义自己的action。action的匹配规则是Intent中的action必须能够和过滤规则中的action匹配(字符串值完全一样,区分大小写)。一个过滤规则中可以有多个action,那么只要intent中的action能够和过滤规则中的任何一个action相同即可匹配成功。另外如果过滤规则中定义了action,那么intent中也必须要有可匹配的action。

category的匹配规则

category的匹配规则是Intent中如果含有category,那么所有的category都必须和过滤规则中的其中一个category相同。换句话说intent中如果出现了category,都必须和过滤规则中的一个category相同。如果没有category的话,这个intent仍然可以匹配成功(这点和action不同)。至于为什么不设置category也能匹配?原因在于系统在调用startActivity或startActivityForResult的时候会默认加上Android.intent.category.DEFAULT。同时为了我们能够接受隐式调用,我们在AndroidManifest.xml中的intent-filter也要指定”android.intent.category.DEFAULT”这个category。

data的匹配规则

data的匹配规则与action类似,如果过滤规则中定义了data,那么Intent中必须也要定义可匹配的data。同时只要intent中的action能和过滤规则中的任何一个action相同即可匹配成功

data的语法

<data
  android:host="string"
  android:path="/string"
  android:pathPattern="*"
  android:port="12"
  android:scheme="string"
  android:mimeType="text/plain"
  ></data>

data由两部分组成,mimeType和URL。mimeType指媒体类型,比如image/jpeg、audio/mpeg4-generic和video/*等。而URL中包含的数据就比较多了,下面是URL的结构:

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

例如:

content://com.blueberry.text:200/folder/subfolder/etc 或 http://www.baidu.com:80/search/info

另外需要注意如果在androidManifest.xml中的配置列表中没有设置URL只设置了mimeType例如:

<intent-filter>
  <action android:name="com.blueberry.second"></action>
  <category android:name="android.intent.category.DEFAULT"></category>
  <data android:mimeType="text/plain"></data>
</intent-filter>

URL实际上是有默认值的URL的默认值为content和File。也就是说如果androidManifest.xml中设置的跟上文一样。我们需要这样才能匹配:

inent.setDataAndType(Uri.parse(file://abc),"text/plain")
或
intent.setDataAndType(Uri.parse(content://abc),"text/plain")

总结

综上所述,如果要隐式启动一个activity。

1. 在androidManifest中查看activity的匹配列表。选择一个intent-filter进行匹配。如果定义有action或data,那我们的intent中也必须要包含可以与它匹配的action或data。

2. 创建intent设置action或者data。category可以设置也可以不设置(如果设置要全部都能匹配)。

3. 保证设置的action、data、category都能正确匹配。

4. 调用启动activity的方法:startActivity或startActivityForResult。

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # IntentFilter  # IntentFilter匹配规则  # Android Intent与IntentFilter案例详解  # Android组件间通信--深入理解Intent与IntentFilter  # Android Intent-Filter匹配规则解析  # Android中的Intent Filter匹配规则简介  # Android IntentFilter的匹配规则示例详解  # 也要  # 都能  # 任何一个  # 中也  # 隐式  # 自己的  # 是一个  # 都必须  # 是有  # 多个  # 如有  # 要有  # 也能  # 希望能  # 如果没有  # 较多  # 只需要  # 其中一个  # 谢谢大家  # 才算 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速搭建高效WAP手机网站?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何在宝塔面板中修改默认建站目录?  高防服务器租用首荐平台,企业级优惠套餐快速部署  网站制作软件免费下载安装,有哪些免费下载的软件网站?  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  如何用wdcp快速搭建高效网站?  如何在七牛云存储上搭建网站并设置自定义域名?  如何用IIS7快速搭建并优化网站站点?  Python文件异常处理策略_健壮性说明【指导】  高性能网站服务器部署指南:稳定运行与安全配置优化方案  晋江文学城电脑版官网 晋江文学城网页版直接进入  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  BootStrap整体框架之基础布局组件  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  如何打造高效商业网站?建站目的决定转化率  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  如何在Windows虚拟主机上快速搭建网站?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何用低价快速搭建高质量网站?  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  如何在服务器上配置二级域名建站?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Android okhttputils现在进度显示实例代码  详解vue.js组件化开发实践  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel如何使用.env文件管理环境变量?(最佳实践)  利用vue写todolist单页应用  如何快速查询域名建站关键信息?  Laravel如何自定义分页视图?(Pagination示例)  Android仿QQ列表左滑删除操作  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  原生JS获取元素集合的子元素宽度实例  如何在香港服务器上快速搭建免备案网站?  PHP 500报错的快速解决方法  如何在云虚拟主机上快速搭建个人网站?  如何快速生成凡客建站的专业级图册?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  如何在企业微信快速生成手机电脑官网?  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?