Intent Android 详解

来源:技术人生 责任编辑:栏目编辑 发表时间:2013-07-01 21:01 点击:
Intent Android 详解
Intents and Intent Filters 三种应用程序基本组件
activity, service和broadcast receiver——是使用称为intent的消息来激活的。
 
Intent消息传递是一种组件间运行时绑定的机制. intent是Intent对象, 它包含了需要做的操作的描述, 或者, 对于广播来说, 包含了正在通知的消息内容. 对于向这三种组件发送intent有不同的机制:
使用Context.startActivity() 或 Activity.startActivityForResult(), 传入一个intent来启动一个activity.
使用 Activity.setResult(), 传入一个intent来从activity中返回结果.
将intent对象传给Context.startService()来启动一个service或者传消息给一个运行的service.
将intent对象传给 Context.bindService()来绑定一个service.
将intent对象传给 Context.sendBroadcast(), Context.sendOrderedBroadcast(),或者Context.sendStickyBroadcast()等广播方法,则它们被传给 broadcast receiver.
在上述三种情况下, android系统会自己找到合适的activity, service, 或者 broadcast receivers来响应intent. 三者的intent相互独立互不干扰. Intent Objects Intent对象 一个intent对象包含了接受该intent的组件的信息(例如需要的动作和该动作需要的数据)和android系统所需要的信息(例如该组件的类别,以及如何启动它). 具体的说: 组件名称 为一个ComponentName 对象. 它是目标组件的完整名(例如"com.example.project.app.FreneticActivity")和应用程序manifest文件设定的包名(例如"com.example.project")的组合.前者的包名部分和后者不一定一样. 组件名称是可选的. 如果设定了的话, Intent对象会被传给指定的类的一个实例. 如果不设定, 则android使用其它信息来定位合适的目标. 组件名称是使用setComponent(), setClass(),或 setClassName()来设定, 使用 getComponent()来获取. Action 一个字符串, 为请求的动作命名, 或者, 对于broadcast intent, 发生的并且正在被报告的动作. 例如: 常量 目标组件 动作 ACTION_CALL activity 发起一个电话呼叫. ACTION_EDIT activity 显示数据给用户来编辑. ACTION_MAIN activity 将该activity作为一个task的第一个activity启动,不传入参数也不期望返回值. ACTION_SYNC activity 将设备上的数据和一个服务器同步. ACTION_BATTERY_LOW broadcast receiver 发出电量不足的警告. ACTION_HEADSET_PLUG broadcast receiver 一个耳机正被插入或者拔出. ACTION_SCREEN_ON broadcast receiver 屏幕被点亮. ACTION_TIMEZONE_CHANGED broadcast receiver 时区设置改变. 你也可以定义自己的action字符串用来启动你的应用程序. 自定义的action应该包含应用程序的包名.例如"com.example.project.SHOW_COLOR". action很大程度上决定了intent的另外部分的结构, 就像一个方法名决定了它接受的参数和返回值一样. 因此, 最好给action一个最能反映其作用的名字. 一个intent对象中的action是使用getAction()和setAction()来读写的. Data 需要操作的数据的URI和它的MIME(多用途互联网邮件扩展,Multipurpose Internet Mail Extensions)类型. 例如, 如果action为ACTION_EDIT, 那么Data将包含待编辑的数据URI. 如果action为ACTION_CALL, Data将为tel:电话号码的URI. 如果action为ACTION_VIEW, 则Data为http:网络地址的URI. 当将一个intent和一个组件相匹配时, 除了URI外数据类型也很重要. 例如, 一个显示图片的程序不应该用来处理声音文件. 数据类型常常可以从URI推断, 特别是content:URI, 它表示该数据属于一个content provider. 但数据类型也可以被intent对象显示声明. setData()方法设置URI, 而setType()方法指定MIME类型, setDataAndType()设置数据URI和MIME类型. 它们可以使用getData()和getType()来读取. Category 一个字符串,包含了关于处理该intent的组件的种类的信息. 一个intent对象可以有任意个category. intent类定义了许多category常数, 例如: 常量 含义 CATEGORY_BROWSABLE 目标activity可以使用浏览器来显示-例如图片或电子邮件消息. CATEGORY_GADGET 该activity可以被包含在另外一个装载小工具的activity中. CATEGORY_HOME 该activity显示主屏幕,也就是用户按下Home键看到的界面. CATEGORY_LAUNCHER 该activity可以作为一个任务的第一个activity,并且列在应用程序启动器中. CATEGORY_PREFERENCE 该activity是一个选项面板. addCategory()方法为一个intent对象增加一个category, removeCategory删除一个category, getCategories()获取intent所有的category. Extras 为键-值对形式的附加信息. 例如ACTION_TIMEZONE_CHANGED的intent有一个"time-zone"附加信息来指明新的时区, 而ACTION_HEADSET_PLUG有一个"state"附加信息来指示耳机是被插入还是被拔出. intent对象有一系列put...()和set...()方法来设定和获取附加信息. 这些方法和Bundle对象很像. 事实上附加信息可以使用putExtras()和getExtras()作为Bundle来读和写. Flags 各种标志. 很多标志指示android系统如何启动一个activi

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • Android 完全退出程序
      • 原创:Android应用开发-Andorid歌词秀,含源码
      • android 屏幕保护
      • Android手机软件汉化教程---第四课 dex文件汉化
      • 众多Android 开源项目推荐,给力工作给力学习
      • Android Audio代码分析4
      • Android得到已安装的应用程序信息!
      • Android开发者指南(29) —— USB Host and Accessory
      • Android成长的幕后推手:工程师鲁宾
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1