安卓组件通信与广播消息资料

上传人:w****i 文档编号:103168931 上传时间:2019-10-06 格式:PPT 页数:55 大小:533.50KB
返回 下载 相关 举报
安卓组件通信与广播消息资料_第1页
第1页 / 共55页
安卓组件通信与广播消息资料_第2页
第2页 / 共55页
安卓组件通信与广播消息资料_第3页
第3页 / 共55页
安卓组件通信与广播消息资料_第4页
第4页 / 共55页
安卓组件通信与广播消息资料_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《安卓组件通信与广播消息资料》由会员分享,可在线阅读,更多相关《安卓组件通信与广播消息资料(55页珍藏版)》请在金锄头文库上搜索。

1、组件通信与广播消息,本章学习内容,使用Intent进行组件通信的原理 使用Intent启动Activity的方法 获取Activity返回值的方法 Intent过滤器的原理与匹配机制 发送和接收广播消息的方法,什么是Intent,Android中一种消息传递机制,可以通过intent消息激活activity、service和broadcast receiver。在运行时绑定在同一应用或不同应用的组件。 每个intent本身是一个Intent类的对象,是对一个执行动作的抽象描述,包含了组件名(component name)、动作(action)、数据(data)、类型(category)、附加信

2、息(extra)和标志(flags)信息。,发送Intent,组件名(component name),接收intent的组件的名字。是目标组件的完整且有效的类名称(如“com.example.project.FreneticActivity”)。 组件名是可选的。 如果设置,intent对象就发送给该类的实例; 如果没设置,Android会使用intent对象的其它信息去定位一个适合的目标。,动作(action),待执行的由字符串命名的动作。Intent类中定义了许多action常量,包括这些:,数据(data),被操作数据的URI和其MIME类型。 不同的action对应不同类型的数据规格说

3、明(specifications)。 ACTION_EDIT,data就是要编辑、显示的文档的URI; ACTION_CALL,data就是一个带有呼叫号码的tel:URI。 ACTION_VIEW,data就是一个http:URI,接收的activity将 被调用去下载显示URI引用的资源。 MIME类型也很重要。例如,一个能显示图片数据的组件不应该 被调用去播放音频文件。,URI(Uniform Resource Identifier),标识抽象和物理资源的字符串。 资源 标识形式多样:URL,URN URI=URL,URN,,URI语法成分 : scheme :Just as there

4、 are many different methods of access to resources, there are a variety of schemes for identifying such resources. It defines the semantics for the remainder of the URI string.,ftp:/ftp.is.co.za/rfc/rfc1808.txt http:/www.ietf.org/rfc/rfc2396.txt mailto:John tel:029-88308119,Android中的URI,Each part of

5、 the URI: scheme:/host:port/path For example, content:/com.example.project:200/folder/subfolder/etc the scheme is “content“, the host is “com.example.project“, the port is “200“, and the path is “folder/subfolder/etc“. The host and port together constitute the URI authority; if a host is not specifi

6、ed, the port is ignored. Each of these attributes is optional, but they are not independent of each other: For an authority to be meaningful, a scheme must also be specified. For a path to be meaningful, both a scheme and an authority must be specified. content:/com.example.project.healthcareprovide

7、r/nurses/rn,数据(data),被操作数据的URI和其MIME类型。 不同的action对应不同类型的数据说明(specifications)。 ACTION_EDIT,data就是要编辑、显示的文档的URI(file:); ACTION_CALL,data就是一个带有呼叫号码的tel:URI。 ACTION_VIEW,data就是一个http:URI,接收的activity将被调用去下载显示URI引用的资源。 MIME类型也很重要。例如,一个能显示图片数据的组件不应该被调用去播放音频文件。,可以明确设置intent对象中的数据类型。setData()方法仅指定数据的URI,setT

8、ype()仅指定数据的MIME类型,setDataAndType()既指其定数据的URI,又指定MIME类型。URI通过getData()获得,类型通过getType()获得。,类型(category),是一个字符串,包含了可以处理intent的这类组件的其它信息。在一个intent对象中可以放置任意多个类型描述。Intent类定义了很多类型常量:,addCategory()方法是在intent对象中放入一个category,removeCategory()将前面添加的category删除,getCategories()获得当前intent对象中的所有category。,附加信息(extra

9、),由一些键值对组成,是发送给处理intent的组件的额外信息。 Key-value pairs that carry additional information required to accomplish the requested action. 一些actions与特殊的extras相配。例如,ACTION_TIMEZONE_CHANGED intent 有一个“time-zone“extra,它标识新的时间区,ACTION_HEADSET_PLUG intent有一个”state“extra表示耳机是否现在处于插入状态。,putExtra() , two parameters: t

10、he key name and the value. You can also create a Bundle object with all the extra data, then insert the Bundle in the Intent with putExtras(). Intent类定义了很多EXTRA_*,见文档,标志(flags),各种各样类型的标志。许多标志指导Android系统怎样启动一个activity(如activity属于哪个任务),activity启动后怎样对待它(如,是否它应被放入最近activities列表)。所有这些标志在Intent类中定义。,Inten

11、t的用途,启动Activity和Service 在Android系统上发布广播消息 可以是接收到的特定数据或消息,也可以是手机的信号变化或电池的电量低等信息 给每种组件发送intent都有不同的机制,启动Activity,在Android系统中,应用程序一般都有多个Activity,Intent可以实现不同Activity之间的切换和数据传递 启动Activity方式 显式启动:必须在Intent中指明启动的Activity 隐式启动: Intent无需指明具体启动哪一个Activity, Android系统根据Intent的action、data和category来决定启动哪一个Activi

12、ty。选择权由Android系统和最终用户来决定。 获得返回值的启动,启动Activity,显式启动 创建一个Intent(见API中android.content.Intent) 指定当前的应用程序上下文以及要启动的Activity 把创建好的这个Intent作为参数传递给startActivity()方法,显式启动 下面用IntentDemo为例说明如何使用Intent启动新的Activity。 程序默认启动的Activity是MainActivity,在用户点击“启动Activity”按钮后,程序启动NewActivity,实现步骤: (1)在AndroidManifest.xml文件中

13、注册这两个Activity; 使用标签,嵌套在标签内部。 (2)创建两个Activity的布局文件; (3)编写MainActivity.java和NewActivity.java文件。,隐式启动 不需要指明需要启动哪一个Activity,而由Android系统来决定。 Android系统会在程序运行时解析Intent,并根据一定的规则对Intent中的action、data和category与Activity的intent过滤器中的匹配。,启动Activity,匹配的组件可以是程序本身的Activity,也可以是Android系统内置应用的Activity,还可以是第三方应用程序提供的Act

14、ivity。 这种方式强调了Android组件的可复用性。,如果程序开发人员希望启动一个浏览器,查看指定的网页内容,却不能确定具体应该启动哪一个Activity? 程序开发人员可以将浏览动作和Web地址作为参数传递给Intent,Android系统则通过匹配动作和数据格式,找到最适合于此动作和数据格式的组件。,隐式启动 Android系统在匹配Intent时,首先根据动作Intent.ACTION_VIEW,得知需要启动具备浏览功能的Activity,但具体是浏览电话号码还是浏览网页,还需要根据数据的URI来做最后判断。 因为数据提供的是Web地址“”,所以最终可以判定Intent需要启动具有

15、网页浏览功能的Activity。一般情况下,Android系统会调用内置的Web浏览器。,隐式启动 WebViewIntentDemo示例说明了如何隐式启动Activity,用户界面,获取Activity返回值的启动方式,很多情况下,后启动的Activity是为了让用户对特定信息进行选择,在后启动的Activity关闭时,这些信息是需要返回给先前启动的Activity。 后启动的Activity称为“子Activity”,先启动的Activity称为“父Activity”。 如果需要将子Activity的信息返回给父Activity,则可以使用获取Activity返回值的方式启动子Activi

16、ty。,一般可以分为以下三个步骤: 在父Activity中启动子Activity 在子Activity中设置返回值 在父Activity中获取返回值,在父Activity中启动子Activity,startActivityForResult(Intent, requestCode): 参数Intent:决定启动哪个Activity; 参数requestCode:请求码; 所有子Activity返回时,Android系统都调用父Activity的同一个处理方法,因此父Activity使用requestCode来确定数据是哪一个子Activity返回的,显式启动子Activity的代码如下 隐式启动子Activity的代码如下,在子Activity调用finish()关闭前,调用setResult()设定需要返回给父Activity的数据。 setResult(int resultCode,Intent data): resultCode:表示子Activity的返回状态,通常为Activity.RESULT_OK(正常

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号