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                https://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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值