intent,Intent类

Intent类相当于Android平台中应用程序之间的通信网络,属于后期绑定,这就意味着将Intent映射和传递给能够处理特定任务的组件是在运行时时行的,而不是在构建或者编译时。
Intent包含3个元素,action.category,data,以及一个额外的可选元素集合。动作和类别都是String,数据是以Uri对象的形式定义的。Uri是通用的URI,包括方案(scheme)、授权(authority)和可选的路径。
Extras 传递给Intent的额外数据,以Bundle的形式定义。
Component 指定Intent使用的显式包名和类名,可选,通常是从动作、类别和类型导出的。
Type 指定显式的MIME类型(与从Uri解析相对)
Category 有关Intent的其他元数据如:android.intent.category.LAUNCHER.
Data以URI 形式表示的数据
Action 指示动作完全限定String如:android.intent.action.MAIN
组件可能过下列两种方式之一调用Intent。
隐式Intent调用是指在调用中由平台决定调用那个组件最合适处理该Intent。这种调用是通过一个Intent的解析过程来实现的。该解析过程使用了动作、数据和类别。显式调用是指在调用中通过代码直接指定哪个组件应该处理该Intent。显式调用是通过指定接收器的Class或者ComponetName实现的(其中ComponetName是一个包的String和类的String)。
解析Intent
有3种类型的Android组件可以注册成为Intent句柄:Activity、BroadcastReceiver和Service。这些组件通常在AndroidManifest.xml文件中使用〈intent-filter>元素向平台注册。成为特定Intent类型的目标。
每一个 在解析了动作和类别之后,下面该解析Intent中的数据了。数据或是一个显式的MIME类型,或是方案、授权和路径的组合。无论是哪一种数据形式,都可以从一个Uri对象导出。定义IntentFilter类时会有一些类型、方案、授权和路径方面的条件,以决定IntentFilter将与那些Intent匹配。Android中的解析过程比较复杂,具体规则如下:
(1)如果有方案而没有类型,则包含任何类型的Intent都匹配。
(2)如是有类型没有方案,则包含任何方案的Intent都匹配。
(3)如果方案和类型都没有,则只有既不包含方案也不包含类型的Intent匹配。
(4)如果指定了授权,则也必须指定方案。
(5)如果指定了路径,则也必须指定方案和授权。
BOOT_COMPLETED表明开机动作执行完成以后调用某个Intent。
常用在Android应用程序中Intent动作和Uri组合说明。
动作 Uri 说明
Intent.ACTION_VIEW geo:latitude,longitude 打开地图应用程序并显示指定的纬度和经度
Intent.ACTION_VIEW geo:0,0?=street+address 打开地图程序并显示相应的地址。
Intent.ACTION_CALL tel:phone_number 打开电话应用程序并拨打指定的电话号码
Intent.ACTION_DIAL tel:phone_number 打开电话应用程序并拨下指定的号码(但不打出)
Intent.ACTION_DIAL voicemail: 打开电话应程序并拨下该语音信箱的电话号码(但不打出)
Intent.ACTION_VIEW http://web_address 打开浏览器应用程序并显示指定的URL
Intent.ACTION_VIEW http://web_address 打开浏览器应用程序并显示指定的URL
Intent.ACTION_WEB_SEARCH plain_text 打开浏览器应用程序并使用Google搜索引擎
如何广播事件
使用Context类提供的 众多方法之一,Intent还可以向所有已配置的接收器广播事件。要注册以接收Intent广播,你需要实现一个BroadcastReceiver。
创建你自己的Intent广播接收器时,你需要扩展Android提供的BroadcastReceiver类,并实现抽象的OnReceive(Context c,Inent i)方法。用Context.startService()启动。
在Android中,Service旨在实现两种目的:运行后台任务或者公开一个远程对象以实现进程间的通信。
实现进程间的通信
Android通过其特有的方法IPC,实现了在不同进程中运行的组件之间的通信。
Android提供了自己的IDL(Interface DefinitionLanguage)你可以创建IDL文件。这些IDL文件会成为aidl工具的输入。该工具用于生成一个java接口和内部Stub类,反过来,你可以使用该Java接口和内部Stub类创建可远程访问的对象。
AIDL文件有特定的语法,允许你定义带有返回类型和参数的方法(与典型Java接口不同的是你不能定义静态字段)。定义方法时,你必须为所有的非基本类型指定方向标记,每个参数的方向标记为以下三种情况之一:in,out或inout。基本类型的方向标记只允许是in.
Tags: 

延伸阅读

最新评论

发表评论