Intent的使用
来源:互联网 发布:科比生涯数据场均 编辑:程序博客网 时间:2024/06/06 00:53
Intent被称之为意图,意图就是表达一个想做某件事的一种意愿.
1.Intent的作用
1>启动Activity
2>启动/绑定Service
3>发广播
4>以及这几个组件之间的通信
2.Intent分类
1>显示Intent
直接指定要启动的组件名或者包名,一般在本应用中使用
例如:
Intent intent = new Intent(FirstActivity.this,SecondActivity.class)startActivity(intent);
Intent intent = new Intent();intent.setClass(FirstActivity.this,SecondActivity.class);//intent.setClassName(FirstActivity.this,"com.tedu.demo.SecondActivity");startActivity(intent);
上面几种效果是一样的都是从FirstActivity跳转到SecondActivity,都是通过直接指定组件名的方式
2>隐式Intent
不直接指定一个组件名,而是通过表达一个意图,通过设置Action,添加Category,设置Data,设置Type实现,
只要其他应用的组件的IntentFilter中与Intent的限制项匹配,则该组件就是可以被启动的,如果有多个其他应用组件满足,由用户选择启动谁,这个是跨进程的.
隐式Intent使用时会添加很多限制条件,主要的作用就是筛选出我们需要启动的组件.
比如:我们想买手机的时候,我们不指定买哪一款手机,但是我们会对我们买的手机提出一些要求,屏幕5,5寸,2.5D玻璃,骁龙820等等,只要手机满足以上的功能,或者比我们期望的功能更多,那么这就是我们所要的,如果有很多的满足我们的要求,这时由我们选择买哪一个.
其实Intent和IntentFilter就是这种关系:
Intent会携带限制条件(通过Action/Category/Data/Type),就是我们对手机的要求,不满足要求的肯定不要
IntentFilter就是我们想买的手机的配置,在程序中就是其他应用的组件的描述.
IntentFilter只要包含我们Intent的条件就是满足的,如果比我们期望还多,这也是允许的.
所以一个组件要想被启动,这个组件的描述IntentFilter包含的内容一定要大于等于Intent中的内容.
注意点:Intent在使用时,默认会携带一个Intent.CATEGORY_DEFAULT, 所以在IntentFileter中至少要包含这样一个Category.
3.Intent的限制条件(筛选组件条件)
1>Action:
一个Intent在使用时,只能携带一个Action,通过Intent的setAction()方法多次,最后一个有效.
2>Category:
一个Intent使用时,可以携带多个Category,通过Intent的addCategory()方法可以添加多个.
3>Data:他是对Action的描述,用于启动其他组件时携带传递的数据
注意:此处的Data和IntentFilter满足至少原则
如:
intent.setData(Uri.parse("lee://www.fkjava.org:8888/test"))
第一种情况:
IntentFilter清单文件的data标签:<data android:scheme="lee"/>
第二种情况:
IntentFilter清单文件的data标签:<data android:scheme="lee"android:port="9999">
第一种情况的组件会被Intent启动
第二种情况的组件不能被启动
对于Data而言:
Intent内容必须完全包含IntentFilter的内容的组件会响应,也就是此处Intent内容可以比IntentFilter多
就在这种情况下特殊,其他IntentFilter必须完全包含Intent的条件
4>Type:这个是对Data传递的数据类型的描述(MIME)
通常情况下Data和Type存在后者覆盖前者的效果,就是后设置的会将前面的覆盖掉:
如:
setData(Uri data)setType(String str)
后面的会覆盖前面的,也就是setData(Uri data)失效了
如果两个都起效果,就要使用setDataAndType(Uri data,String str);
5>Flag(标识)
用于限制被启动组件的启动情况,比如限制Activity以什么方式启动,在新栈中启动,还是其他,具体使用看官方文档.
注意区别:Extra用于本应用中组件之间通信携带的数据.
4.IntentFilter(组件的描述用于匹配Intent)
使用方式:
一般在清单配置文件中使用:
1>action标签:(可以添加多个)
2>category标签:(可以添加多个)
注意:一定要有一个category标签是
<category android:name="android.intent.category.DEFAULT"/>
因为Intent使用默认携带这个,没有无法被启动!
3>data标签:(此标签包含Intent的限制条件data和type)(0个或1个)
注意:广播接收者BroadCastReciver动态注册时,需要在代码中声明IntentFilter
- 学习Intent的使用
- Intent的使用
- Intent对象的使用
- 学习Intent的使用
- Intent的使用
- Intent-filter的使用
- android---Intent的使用
- intent filter的使用
- Intent意图的使用
- Intent的使用
- Intent 的使用
- Intent的使用
- intent 的使用
- 关于Intent的使用
- Intent的使用
- Android Intent的使用
- [Android]Intent的使用
- Intent的使用
- R语言快捷键大全中文版
- Ubuntu下如何解压缩zip,tar,tar.gz,tar.bz2文件
- 读《About Face 4 交互设计精髓》21
- 网站压力测试工具webbench 安装与使用
- 如何将一个Activity设置为Dialog显示
- Intent的使用
- 【NOIP2016提高组模拟】单峰
- centos之lamp
- 【金融干货】四步教你:开发风控模型?
- 加载图片到Head中 分为 加载网上和本地的图片的方法
- 产品为何总是做不好 (五): 头痛医头,脚痛医脚
- classify.py skimage error: ValueError: can not convert object to float64
- Zjr506的捕猫计划
- 再看Java--imooc三季Java视频笔记