Intents and Intent Filters 三种应用程序基本组件

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 09:18 我要评论(0)

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系统如何启动一个activity(例如该activity属于哪个任务)和启动后如何处理它(例如, 它是否属于最近activity列表中). android系统和应用程序使用intent对象来送出系统广播和激活系统定义的组件. Intent Resolution Intent解析

intent有两种: 显式intent使用名字来指定目标组件. 由于组件名称一般不会被其它开发者所熟知, 这种intent一般用于应用程序内部消息-- 例如一个activity启动一个附属的service或者另一个activity. 隐式intent不指定目标的名称. 一般用于启动其它应用程序的组件. Android将显式intent发送给指定的类. intent对象中名字唯一决定接受intent的对象.

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...