Intent初级
来源:互联网 发布:淘宝价格 编辑:程序博客网 时间:2024/05/08 00:36
Intent可以理解为不同组件通信的媒介或者信使。
Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcast。
具体方法如下表:
组件名称
方法名称
Activity
startActivity()
startActivityForResult()
Service
startService()
bindService()
Broadcasts
sendBroadcast()
sendOrderedBroadcast()
sendStickyBroadcast()
1.启动Activity:
向Context.startActivity() 或Activity.startActivityForResult()方法传递一个Intent对象,可以启动一个activity,或使得一个已经存在的activity去做一些新的事情。
(也可以向 Activity.setResult() 去传递这个Intent对象,返回调用了startActivityForResult()
的activity的一些信息。)
2.启动Service:
向 Context.startService() 方法传递Intent对象可以初始化一个service或者向一个已经存在的service传递新的指令。
类似的,向Context.bindService() 方法传递Intent对象可以在调用所在的组件和目标service之间建立一种连接。如果这个service并没有开始运行,则它可以初始化这个service。
3.发起广播Broadcast
可以向下面的广播方法传递Intent对象来发起广播:
Context.sendBroadcast(),Context.sendOrderedBroadcast(), 或 Context.sendStickyBroadcast()。系统会找到相应的广播接收者对此进行响应。
Intent在寻找目标组件时有两种方法:
第一种,显式调用,通过Component name直接指定;
第二种,隐式调用,没有明确指定目标组件的名称,那么就要通过一定的条件过滤筛选。
启动activity、service和broadcast的消息系统是没有任何重合的,即,一个要启动activity的Intent对象是绝对不会启动一个service的。
Intent对象由以下六个部分组成:
Component name
Action
Data
Category
Extras
Flags
Component name
Component name即组件名称,是要处理这个Intent对象的组件名称。
组件名称对象由ComponentName类来封装,组件名称包含包名称和类名称,被声明在AndroidManifest.xml文件中。
组件名称通过 setComponent(),setClass(),setClassName()设置,通过getComponent()获取。
需要注意的是Component name是一个可选项,如果被设置,那么Intent对象就显式指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。
Action
Action是指Intent要完成的动作,是一个字符串常量。
在Intent类里面定义了很多Action常量,其中有:
Intent类中有很多预定义的常量,为了一些通常的动作;还有一些定义在Android API的其他地方。
也可以自己定义Action常量,自定义的常量需要加上你的应用的包名作为前缀。
Action在很大程度上决定了Intent的其他部分是如何构造的,尤其是 data 和 extras域。(就好像函数名会决定着参数值和返回值一样。)所以Action的名字应该尽可能具体,并且它们应该和Intent中的其他域紧密结合。
使用 setAction() 和 getAction()来设置和读取Action属性。
Data
Data属性是执行动作的URI和MIME类型,不同的动作有不同的数据规格。
比如,Action是ACTION_EDIT时,数据域将是文档的URI;Action是ACTION_CALL时,数据域是 tel: URI ,带有要拨打的电话号码;如果Action是 ACTION_VIEW,则数据域是http: URI。
当匹配intent和能够处理intent所带的数据的组件时,知道数据类型(MIME类型)是很重要的。比如,一个展示图像的组件不应该被叫去播放一个音频。
很多情况下,从URI可以看出数据类型,比如content: URIs,表示数据是在设备上,但是是由content provider控制。
数据类型也可以显式指定,比如setData()方法指定数据为URI,setType() 指定为MIME type,setDataAndType() 指定它既为URI又为MIME type。读取的时候URI用getData(),MIME type用getType()。
Category
Category是一个字符串,提供了额外的信息,有关于能够处理这个Intent对象的组件种类。
一个Intent对象中可以包含任意数量的category描述信息。
Intent类中也定义了一些Category常量:
与category相应的方法有添加addCategory()、移除removeCategory() 和获取所有category getCategories() 。
Extras
传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对。就好像一些动作和特定的数据URI对应,一些动作和特定的extras对应。
比如ACTION_TIMEZONE_CHANGED intent对象有一个 "time-zone
"的extra来确认新的时区;
ACTION_HEADSET_PLUG
有一个"state
" extra表示耳机是否插入,还有一个 "name
" extra关于耳机类型;
如果你要设计一个SHOW_COLOR动作,那么extra中应该包含颜色值。
Intent对象有一系列的putXXX()函数用于放入各种数据类型,相应的也有一系列的getXXX()函数用于读取数据。
实际上,数据可以被作为一个Bundle对象被使用,利用 putExtras() 和 getExtras() 方法。
Flags
各种类型的Flag。很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待它。所有这些都定义在Intent类中。
- Intent初级
- Intent初级学习
- 初级——intent
- Intent初级学习
- android 初级入门 intent
- [android] Intent的初级学习
- Android初级篇-intent的使用
- android学习笔记(4)Intent初级学习
- Intent界面跳转,数据传递 初级
- 《Android开发从零开始》——7.Intent初级学习
- Android初级学习之Intent的简单使用
- Android开发初级00_1有关intent的知识点
- 初级
- Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
- Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
- Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
- intent
- Intent
- InputStream和Reader的区别
- Android 手机上安装并运行 Ubuntu 12.04
- 加班费
- HDU 4735 Little Wish~ lyrical step~(DLX , 重复覆盖)
- Vision引擎中特效 - 粒子系统图形介绍
- Intent初级
- 一个生活在远古时代的内心告白
- Sorting It All Out
- poj 2689 素数筛选的巧妙使用
- Linux 的 apache2.4+mysql5.5+php5.3 环境配置(全部用源码安装)
- XML Schema学习札记(1)——基础总览
- Java自定义标签@MyTag
- php class中self,parent,this的区别,以及实例
- Fuel 5.1安装openstack环境