Intent匹配规则详解:打造完美Activity交互
需积分: 14 56 浏览量
更新于2024-09-09
收藏 678KB DOCX 举报
"intent匹配规则大总结"
在Android开发中,Intent是组件间通信的重要手段,它用于启动Activity、Service或者BroadcastReceiver。Intent匹配规则对于理解如何正确传递信息至关重要。以下是对intent匹配规则的详细解析:
1. category的必要性:
每个intent-filter至少需要一个category,否则程序无法运行。Category定义了intent的类别,如`android.intent.category.DEFAULT`或`android.intent.category.LAUNCHER`。
2. 多Action匹配:
如果一个intent-filter中有多个actions(如ACTION_VIEW, ACTION_EDIT),而intent只有一个action,那么intent可以匹配该filter。反之,如果intent中有多个actions,但filter只有一个,将无法匹配并导致运行错误。
3. category的匹配规则:
- intent中有多个category,而filter只有一个,会导致运行停止。
- intent中有一个category,filter中有多个,只要intent的category匹配filter中的任意一个,就可以启动对应的Activity。
4. data部分的重要性:
- 如果filter只有data的mimeType(例如`data android:mimeType="text/plain"`),则intent的URI必须是`content://`或`file://`开头,且mimeType与filter匹配,否则无法启动。
- 只指定type(mimeType)的intent可以匹配到相应的filter,例如`intent.setType("text/plain")`。
- filter中有多个data的mimeType,intent中有一个,可以匹配;相反,intent中有多个mimeType,filter只有一个,匹配失败。
5. setDataAndType的使用:
当需要同时指定data和type时,必须使用`setDataAndType()`方法,因为单独调用`setData()`和`setType()`会清除之前设置的值。
6. scheme的匹配:
Intent的URI可以通过scheme来指定数据来源,如`http://`、`content://`或`file://`。不同的scheme有不同的匹配规则,正确的scheme可以匹配到相应的intent-filter。
7. uri的特殊情况:
有时候,即使没有明确指定URI,但filter中默认支持`content`和`file`,因此intent的URI也必须符合这些默认值。
8. default category:
如果缺少`android.intent.category.DEFAULT`,intent可能无法正常匹配。
intent的匹配规则是严格的:intent的要求必须完全被activity的intent-filter满足,缺一不可,而intent未明确指定的默认值,filter也需要提供支持。开发者需要精确配置intent和intent-filter,以确保组件间的正确交互。
2020-09-02 上传
2011-12-20 上传
2020-09-03 上传
2019-07-31 上传
2016-07-30 上传
2011-06-11 上传
2016-01-23 上传
2020-09-03 上传
2011-11-30 上传
蓝精灵与大脸猫
- 粉丝: 0
- 资源: 7
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器