资源预览内容
第1页 / 共32页
第2页 / 共32页
第3页 / 共32页
第4页 / 共32页
第5页 / 共32页
第6页 / 共32页
第7页 / 共32页
第8页 / 共32页
第9页 / 共32页
第10页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第 4 章 意图Intent 了解Intent的功能及作用 掌握Intent常用的属性及方法 熟悉Activity之间的消息传递机制 了解广播接收Intent 了解Intent的实现策略许可 本章目标 - 2 - 组组成属性设设置属性方法获获取属性方法 动作ActionsetAction()getAction() 数据DatasetData()getData() 分类CategoryaddCategory()getCategories() 类型TypesetType()getType() 组件Component setComponent() setClass() setClassName() getComponent() 扩展信息ExtraputExtra() getXXXExtra()获取不同数据类型的数据,如int类型则使 用getIntExtra(),字符串则使用getStringExtra() getExtras()获取Bundle包 Intent概述 Intent是Android的核心组件,利用消息实现应用程序间的交互机制,这 种消息描述了应用中一次操作的动作、数据以及附加数据,系统通过该 Intent的描述负责找到对应的组件,并将Intent传递给调用的组件,完成 组件的调用。 Intent由动作、数据、分类、类型、组件和扩展信息等内容组成,每个组 成都由相应的属性进行表示,并提供设置和获取相应属性的方法。 - 3 - Action属性 Action属性用于描述Intent要完成的动作,对要执行的动作进行一个简 要描述。Intent类定义了一系列Action属性常量,用来标识一套标准动 作,如ACTION_CALL(打电话)、ACTION_EDIT(编辑)等。 Action属性常量 Action常量行为为描述使用组组件(分类类) ACTION_CALL打电话 ,即直接呼叫Data中所带电话 号码 Activity ACTION_ANSWER接听来电 ACTION_SEND由用户指定发送方式进行数据发送操作 ACTION_SENDTO根据不同的Data类型,通过对应 的软件发送数据 ACTION_VIEW根据不同的Data类型,通过对应 的软件显示数据 ACTION_EDIT显示可编辑 的数据 ACTION_MAIN应用程序的入口 ACTION_SYNC 同步服务器与移动设备 之间的数据 ACTION_BATTERY_LOW警告设备电 量低 Broadcast ACTION_HEADSET_PLUG插入或者拔出耳机 ACTION_SCREEN_ON打开移动设备 屏幕 ACTION_TIMEZONE_CHANGED移动设备时 区发生变化 - 4 - Data属性 Intent的Data属性是执行动作的URI和MIME类型 Data属性常量 Action和Data一般匹配使用,不同的Action由不同的Data数据指定 Data属性说说明示例 tel:/号码数据格式,后跟电话 号码tel:/123 mailto:/邮件数据格式,后跟邮件收件人地址mailto:/dh smsto:/短息数据格式,后跟短信接收号码smsto:/123 content:/内容数据格式,后跟需要读取的内容content:/contacts/people/1 file:/文件数据格式,后跟文件路径file:/sdcard/mymusic.mp3 geo:/latitude,longitude经纬 数据格式,在地图上显示经纬 度所指定的位置geo:/180,65 Action属性Data属性描述 ACTION_VIEWcontent:/contacts/people/1显示_id为1的联系人信息 ACTION_EDITcontent:/contacts/people/1编辑 _id为1的联系人信息 ACTION_VIEWtel:123显示电话为 123的联系人信息 ACTION_VIEW在浏览 器中浏览该 网页 ACTION_VIEWfile:/sdcard/mymusic.mp3播放MP3 - 5 - Category属性 Category属性指明一个执行Action的分类 Intent中定义了一系列Category属性常量 Category属性说说明 CATEGORY_DEFAULT默认的执行方式,按照普通Activity的执行方式执行 CATEGORY_HOME该组件为Home Activity CATEGORY_LAUNCHER优先级最高的Activity,通常为入口ACTION_MAIN配合使用 CATEGORY_BROWSABLE可以使用浏览器启动 CATEGORY_GADGET可以内嵌到另外的Activity中 - 6 - Component属性 Component属性用于指明Intent的目标组件的类名称。 通常Android会根据Intent中包含的其他属性的信息,比如Action、 Data/Type、Category进行查找,最终找到一个与之匹配的目标组件。但 是,如果指定了Component这个属性,Intent则会直接根据组件名查找 到相应的组件,而不再执行上述查找过程。指定Component属性后, Intent的其他属性都是可选的。 根据Intent寻找目标组件时所采用的方式不同,可以将Intent分为两类: p显式Intent,这种方式通过直接指定组件名称Component来实现; p隐式Intent,这种方式通过Intent Filter过滤实现,过滤时通常根据 Action、Data和Category属性进行匹配查找。 显式Intent通过setComponent()、setClassName()或setClass()设置组 件名: /创建一个Intent对象 Intent intent = new Intent(); /指定Intent对象的目标组件是Activity2 intent.setClass(Activity1.this, Activity2.class); 当前环境 目标组件 - 7 - Extra属性 Extra属性用于添加一些附加信息,例如发送一个邮件,就可以通过 Extra属性来添加主题(subject)和内容(body)。 通过使用Intent对象的putExtra()方法来添加附加信息 将一个人的姓名附加到Intent对象中,代码如下所示 Intent intent = new Intent(); intent.putExtra(name,zhangsan); 通过使用Intent对象的getXXXExtra()方法可以获取附加信息。例如, 将上面代码存入Intent对象中的人名获取出来,因存入的是字符串, 所以可以使用getStringExtra()方法获取数据 String name=intent.getStringExtra(name); - 8 - Intent启动 Intent启动不同组件的方法: 核心组组件调调用方法作用 Activity Context.startActivity() Activity.startActivityForRestult() 启动一个Activity或使一个已存在 的Activity去做新的工作 Services Context.startService() 初始化一个Service或传递 一个新 的操作给当前正在运行的Service Context.bindService()绑定一个已存在的Service Broadcast Receiver Context.sendBroadcast() Context.sendOrderedBroadcast() Context.sendStickyBroadcast() 对所有想接受消息的Broadcast Receiver传递 消息 - 9 - Intent消息传递 Intent的Extra属性用于添加一些附加信息,利用该属性可以进行消息 的传递。 将传递的信息存放到Extra属性中有如下两种方式: p一种是直接调用putExtra()方法将信息添加到Extra属性中,然后通 过调用getXXXExtra()方法进行获取即可。这种方式比较简单、直接 ,主要用于数据量比较少的情况下。 p另一种是先将数据封装到Bundle包中,Bundle可以被看成一个“ 键/值”映射的哈希表,当数据量比较多时,可以使用Bundle存放 数据;然后通过putExtras()方法将Bundle对象添加到Extra属性中 ,再通过使用getExtras()方法获取存放的Bundle对象;最后读取 Bundle包中的数据。这种方式是间接通过Bundle包对数据先进行 封装,再进行传递,实现起来比较繁琐,因此主要用于数据量较多 的情况。 - 10 - Intent消息传递 - Bundle类 方法功能描述 Object get(String key)获取关键字key对应 的数据 boolean getBoolean(String key) 获取关键字key对应 的布尔值,若找不到关键字的记录 ,则返回 false boolean getBoolean (String key, boolean defaultValue) 获取关键字key对应 的布尔值,若找不到关键字的记录 ,则返回 defaultValue Bundle getBundle(String key) 获取关键字key对应 的Bundle对象,若找不到关键字的记录 ,则返 回null char getChar (String key)获取关键字key对应 的char值,若找不到关键字的记录 ,则返回0 char getChar (String key, char defaultValue) 获取关键字key对应 的char值,若找不到关键字的记录 ,则返回 defaultValue boolean hasFileDescriptors() Bundle对象是否包含文件描述符,返回true则Bundle对象包含文件 描述符,否则不包含 void putAll (Bundle map)插入map到该Bundle对象中 void putBoolean (String key, boolean value) 插入布尔值value到该Bundle对象中,若关键字key已存在,则原有 值被value替代 void putBundle (String key, Bundle value)插入Bundle对象value 到该Bundle对象中 void putByte (String key, byte value) 插入字节值 value 到该Bundle对象中 void remove (String key) 移除关键字为key的记录 int size () 获取Bundle对象的关键字个数 - 11 - Intent Filter Intent可以通过显示方式或隐式方式找到目标组件,显示方式是直接通 过设置组件名来实现,而隐式方式则是通过Intent Filter过滤实现。 Android提供了两种生成Intent Filter方式: p一种是通过IntentFilter类生成; p另一种通过在配置文件AndroidManifest.xml中定义 元素生成。 - 12 - 元素 在AndroidManifest.xml配置文件中,IntentFilter以 元素来指定,一个组件中可以有多个元素,每个 元素描述不同的能力。 元素中常用、和这些 子元素,分别对应Intent中的Action、Data和Ca
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号