首页 Android组件通信与广播消息

Android组件通信与广播消息

举报
开通vip

Android组件通信与广播消息null第6章 组件通信与广播消息第6章 组件通信与广播消息本章学习目标本章学习目标了解使用Intent进行组件通信的原理 掌握使用Intent启动Activity的方法 掌握获取Activity返回值的方法 了解Intent过滤器的原理与匹配机制 掌握发送和接收广播消息的方法 6.1 Intent6.1 IntentIntent是一个动作的完整描述,包含了动作的产生组件、接收组件和传递的数据信息 Intent也可称为一个在不同组件之间传递的消息,这个消息在到达接收组件后,接收组件会执行相关的动作 In...

Android组件通信与广播消息
null第6章 组件通信与广播消息第6章 组件通信与广播消息本章学习目标本章学习目标了解使用Intent进行组件通信的原理 掌握使用Intent启动Activity的方法 掌握获取Activity返回值的方法 了解Intent过滤器的原理与匹配机制 掌握发送和接收广播消息的方法 6.1 Intent6.1 IntentIntent是一个动作的完整描述,包含了动作的产生组件、接收组件和传递的数据信息 Intent也可称为一个在不同组件之间传递的消息,这个消息在到达接收组件后,接收组件会执行相关的动作 Intent为Activity、Service和BroadcastReceiver等组件提供交互能力 Intent的用途 启动Activity和Service 在Android系统上发布广播消息 广播消息可以是接收到特定数据或消息,也可以是手机的信号变化或电池的电量过低等信息 6.1 Intent6.1 Intent6.1.1 启动Activity 在Android系统中,应用程序一般都有多个Activity,Intent可以实现不同Activity之间的切换和数据传递 启动Activity方式 显式启动,必须在Intent中指明启动的Activity所在的类 隐式启动, Android系统根据Intent的动作和数据来决定启动哪一个Activity,也就是说在隐式启动时,Intent中只包含需要执行的动作和所包含的数据,而无需指明具体启动哪一个Activity,选择权有Android系统和最终用户来决定6.1 Intent6.1 Intent6.1.1 启动Activity 显式启动 使用Intent显式启动Activity 创建一个Intent 指定当前的应用程序上下文以及要启动的Activity 把创建好的这个Intent作为参数传递给startActivity()方法 6.1 Intent6.1 Intent6.1.1 启动Activity 显式启动 IntentDemo示例说明如何使用Intent启动新的Activity IntentDemo示例包含两个Activity类 IntentDemo ActivityToStart 程序启动是默认启动IntentDemo这个Activity 6.1 Intent6.1 Intent6.1.1 启动Activity 显式启动 点击“启动Activity”按钮后,程序启动ActivityToStart这个Activity 6.1 Intent6.1 Intent6.1.1 启动Activity 显式启动 在AndroidManifest.xml文件中注册上面这两个Activity,应使用标签,嵌套在标签内部 6.1 Intent6.1 Intent6.1.1 启动Activity 显式启动 Android应用程序中,用户使用的每个组件都必须在AndroidManifest.xml文件中的节点内定义 节点下共有两个节点,分别代表应用程序中所使用的两个Activity,IntentDemo和ActivityToStart6.1 Intent6.1 Intent6.1.1 启动Activity 显式启动 在IntentDemo.java文件中,包含了显示使用Intent启动Activity的核心代码 在点击事件的处理函数中,Intent构造函数的第1个参数是应用程序上下文,程序中的应用程序上下文就是IntentDemo;第2个参数是接收Intent的目标组件,使用的是显式启动方式,直接指明了需要启动的Activity6.1 Intent6.1 Intent6.1.1 启动Activity 隐式启动 优点:不需要指明需要启动哪一个Activity,而由Android系统来决定,有利于使用第三方组件 隐式启动Activity时,Android系统在应用程序运行时解析Intent,并根据一定的 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf 对Intent和Activity进行匹配,使Intent上的动作、数据与Activity完全吻合 匹配的Activity可以是应用程序本身的,也可以是Android系统内置的,还可以是第三方应用程序提供的。因此,这种方式更加强调了Android应用程序中组件的可复用性 6.1 Intent6.1 Intent6.1.1 启动Activity 隐式启动 在缺省情况下,Android系统会调用内置的Web浏览器 Intent的动作是Intent.ACTION_VIEW,根据URI的数据类型来匹配动作 数据部分的URI是Web地址,使用Uri.parse(urlString)方法,可以简单的把一个字符串解释成Uri对象 Intent的语法如下 Intent构造函数的第1个参数是Intent需要执行的动作 第2个参数是URI,表示需要传递的数据6.1 Intent6.1 Intent6.1.1 启动Activity 隐式启动 Android系统支持的常见动作字符串常量表6.1 Intent6.1 Intent6.1.1 启动Activity 隐式启动 WebViewIntentDemo示例说明如何隐式启动Activity 6.1 Intent6.1 Intent6.1.1 启动Activity 隐式启动 当用户在文本框中输入要访问网址后,通过点击“浏览此URL”按钮,程序根据用户输入的网址生成一个Intent,并以隐式启动的方式调用Android内置的Web浏览器,并打开指定的Web页面 本例输入的网址是哈尔滨工程大学的主站地址,地址是:http://www.hrbeu.edu.cn6.1 Intent6.1 Intent6.1.2 获取Activity返回值 在上一小节IntentDemo示例中,通过使用startActivity(Intent)方法启动Activity后,启动后的两个Activity之间相互独立,没有任何的关联 在很多情况下,后启动的Activity是为了让用户对特定信息进行选择,在关闭这个Activity后,用户的选择信息需要返回给未关闭的那个Activity 按照Activity启动的先后顺序,先启动的称为父Activity,后启动的称为子Activity 如果需要将子Activity的部分信息返回给父Activity,则可以使用Sub-Activity的方式去启动子Activity 6.1 Intent6.1 Intent6.1.2 获取Activity返回值 获取子Activity的返回值,一般可以分为以下三个 步骤 新产品开发流程的步骤课题研究的五个步骤成本核算步骤微型课题研究步骤数控铣床操作步骤 以Sub-Activity的方式启动子Activity 设置子Activity的返回值 在父Activity中获取返回值 6.1 Intent6.1 Intent6.1.2 获取Activity返回值 以Sub-Activity的方式启动子Activity 调用startActivityForResult(Intent, requestCode)函数 参数Intent用于决定启动哪个Activity 参数requestCode是唯一的标识子Activity的请求码 显式启动子Activity的代码如下 隐式启动子Activity的代码如下 6.1 Intent6.1 Intent6.1.2 获取Activity返回值 设置子Activity的返回值 在子Activity调用finish()函数关闭前,调用setResult()函数将所需的数据返回给父Activity setResult()函数有两个参数 结果码 返回值 6.1 Intent6.1 Intent6.1.2 获取Activity返回值 设置子Activity的返回值 结果码表明了子Activity的返回状态,通常为Activity.RESULT_OK或者Activity.RESULT_CANCELED,或自定义的结果码,结果码均为整数类型 返回值用封装在Intent中,子Activity通过Intent将需要返回的数据传递给父Activity。数据主要是Uri形式,可以附加一些额外信息,这些额外信息用Extra的集合表示 下面代码说明如何在子Activity中设置返回值6.1 Intent6.1 Intent6.1.2 获取Activity返回值 在父Activity中获取返回值 当子Activity关闭时,启动它的父Activity的onActivityResult()函数将被调用;如果需要在父Activity中处理子Activity的返回值,则重载此函数即可 此函数的语法如下 第1个参数requestCode,用来表示是哪一个子Activity的返回值 第2个参数resultCode用于表示子Activity的返回状态 第3个参数data是子Activity的返回数据,返回数据类型是Intent。根据返回数据的用途不同,Uri数据的协议则不同,也可以使用Extra方法返回一些原始类型的数据6.1 Intent6.1 Intent6.1.2 获取Activity返回值 在父Activity中获取返回值 下面代码说明如何在父Activity中处理子Activity的返回值6.1 Intent6.1 Intent6.1.2 获取Activity返回值 在父Activity中获取返回值 第1行代码和第12行代码是两个子Activity的请求码 第7行代码对请求码进行匹配 第9行和第11行代码对结果码进行判断 如果返回的结果码是Activity.RESULT_OK,则在代码的第10行使用getData()函数获取Intent中的Uri数据 如果返回的结果码是Activity.RESULT_CANCELED,则不进行任何操作6.1 Intent6.1 Intent6.1.2 获取Activity返回值 ActivityCommunication示例说明了如何以Sub-Activity方式启动子Activity,以及使用Intent进行组件间通信 6.1 Intent6.1 Intent6.1.2 获取Activity返回值 当用户点击“启动Activity1”和“启动Activity2”按钮时,程序将分别启动子SubActivity1和SubActivity26.1 Intent6.1 Intent6.1.2 获取Activity返回值 SubActivity1提供了一个输入框,以及“接受”和“撤销”两个按钮 如果在输入框中输入信息后点击“接受”按钮,程序会把输入框中的信息传递给其父Activity,并在父Activity的界面上显示 如果用户点击“撤销”按钮,则程序不会向父Activity传递任何信息6.1 Intent6.1 Intent6.1.2 获取Activity返回值 SubActivity2主要是为了说明如何在父Activity中处理多个子Activity,因此仅提供了用于关闭SubActivity2的“关闭”按钮 6.1 Intent6.1 Intent6.1.2 获取Activity返回值 ActivityCommunication文件结构6.1 Intent6.1 Intent6.1.2 获取Activity返回值 ActivityCommunication.java文件的核心代码如下 6.1 Intent6.1 Intent6.1.2 获取Activity返回值 6.1 Intent6.1 Intent6.1.2 获取Activity返回值 代码的第2行和第3行分别定义了两个子Activity的请求码 在代码的第16行和第23行以Sub-Activity的方式分别启动两个子Activity6.1 Intent6.1 Intent6.1.2 获取Activity返回值 代码第29行是子Activity关闭后的返回值处理函数,其中requestCode是子Activity返回的请求码,应该与第2行和第3行定义的两个请求码相匹配 resultCode是结果码,在代码第32行对结果码进行判断,如果等于RESULT_OK,在第35行代码获取子Activity的返回值中的数据 data是返回值,子Activity需要返回的数据就保存在data中 6.1 Intent6.1 Intent6.1.2 获取Activity返回值 SubActivity1.java的核心代码如下 6.1 Intent6.1 Intent6.1.2 获取Activity返回值 第13行代码将EditText控件的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 作为数据保存在Uri中 第14行代码中使用这个Uri构造Intent 第15行代码中,将Intent作为返回值,RESUIT_OK作为结果码,通过调用setResult()函数,将返回值和结果码传递给父Activity 第16行代码调用finish()函数关闭当前的子Activity6.1 Intent6.1 Intent6.1.2 获取Activity返回值 SubActivity2.java的核心代码 第10行的setResult()函数仅设置了结果码,第2个参数为null,表示数据需要传递给父Activity6.2 Intent过滤器6.2 Intent过滤器Intent过滤器 Intent过滤器是一种根据Intent中的动作(Action)、类别(Categorie)和数据(Data)等内容,对适合接收该Intent的组件进行匹配和筛选的机制 Intent过滤器可以匹配数据类型、路径和协议,还包括可以用来确定多个匹配项顺序的优先级(Priority) 应用程序的Activity组件、Service组件和BroadcastReceiver都可以注册Intent过滤器,则这些组件在特定的数据格式上就可以产生相应的动作6.2 Intent过滤器6.2 Intent过滤器注册Intent过滤器 在AndroidManifest.xml文件的各个组件的节点下定义节点,然后在节点中声明该组件所支持的动作、执行的环境和数据格式等信息 在程序代码中动态地为组件设置Intent过滤器 节点支持标签、标签和标签 标签定义Intent过滤器的“类别” 标签定义Intent过滤器的“动作” 标签定义Intent过滤器的“数据”6.2 Intent过滤器6.2 Intent过滤器注册Intent过滤器 节点支持的标签和属性 标签用来指定Intent过滤器的服务方式,每个Intent过滤器可以定义多个标签,程序开发人员可使用自定义的类别,或使用Android系统提供的类别6.2 Intent过滤器6.2 Intent过滤器注册Intent过滤器 Android系统提供的类别 AndroidManifest.xml文件中的每个组件的都被解析成一个Intent过滤器对象。当应用程序安装到Android系统时,所有的组件和Intent过滤器都会注册到Android系统中。这样,Android系统便知道了如何将任意一个Intent请求通过Intent过滤器映射到相应的组件上6.2 Intent过滤器6.2 Intent过滤器Intent解析 Intent到Intent过滤器的映射过程称为“Intent解析” Intent解析可以在所有的组件中,找到一个可以与请求的Intent达成最佳匹配的Intent过滤器 Intent解析的匹配规则 Android系统把所有应用程序包中的Intent过滤器集合在一起,形成一个完整的Intent过滤器列表 在Intent与Intent过滤器进行匹配时,Android系统会将列表中所有Intent过滤器的“动作”和“类别”与Intent进行匹配,任何不匹配的Intent过滤器都将被过滤掉。没有指定“动作”的Intent过滤器可以匹配任何的Intent,但是没有指定“类别”的Intent过滤器只能匹配没有“类别”的Intent 6.2 Intent过滤器6.2 Intent过滤器Intent解析 把Intent数据Uri的每个子部与Intent过滤器的标签中的属性进行匹配,如果标签指定了协议、主机名、路径名或MIME类型,那么这些属性都要与Intent的Uri数据部分进行匹配,任何不匹配的Intent过滤器均被过滤掉 如果Intent过滤器的匹配结果多于一个,则可以根据在标签中定义的优先级标签来对Intent过滤器进行排序,优先级最高的Intent过滤器将被选择 6.2 Intent过滤器6.2 Intent过滤器IntentResolutionDemo示例 IntentResolutionDemo示例说明了如何在AndroidManifest.xml文件中注册Intent过滤器,以及如何设置节点属性来捕获指定的Intent AndroidManifest.xml的完整代码如下6.2 Intent过滤器6.2 Intent过滤器IntentResolutionDemo示例6.2 Intent过滤器6.2 Intent过滤器第7行代码和第14行代码分别定义了两个Activity 第9行到第12行是第1个Activity的Intent过滤器,动作是android.intent.action.MAIN,类别是android.intent.category.LAUNCHER。由过滤器的动作和类别可知,这个Activity是应用程序启动后显示的缺省用户界面 第16~20行是第2个Activity的Intent过滤器,过滤器的动作是android.intent.action.VIEW,表示根据Uri协议,以最佳的方式启动相应的Activity;类别是android.intent.category.DEFAULT,表示数据的默认动作;数据的协议部分是android:scheme="schemodemo",数据的主机名称部分是android:host="edu.hrbeu" 6.2 Intent过滤器6.2 Intent过滤器IntentResolutionDemo.java文件中Intent实例化和启动Activity的代码如下 第1行代码定义的Intent,动作为Intent.ACTION_VIEW,与Intent过滤器的动作android.intent.action.VIEW匹配;Uri是"schemodemo://edu.hrbeu/path",其中的协议部分为"schemodemo",主机名部分为"edu.hrbeu",也与Intent过滤器定义的数据要求完全匹配 代码第1行定义的Intent,在Android系统与Intent过滤器列表进行匹配时,会与AndroidManifest.xml文件中ActivityToStart定义的Intent过滤器完全匹配6.3 广播消息6.3 广播消息广播消息 Intent的另一种用途是发送广播消息 应用程序和Android系统都可以使用Intent发送广播消息 广播消息的内容可以与应用程序密切相关的数据信息,也可以Android的系统信息,例如网络连接变化、电池电量变化、接收到短信和系统设置变化等等 如果应用程序注册了BroadcastReceiver,则可以接收到指定的广播消息 6.3 广播消息6.3 广播消息广播信息的使用方法 创建一个Intent 注意:在构造Intent时必须用一个全局唯一的字符串标识其要执行的动作,通常使用应用程序包的名称 调用sendBroadcast()函数,就可把Intent携带的消息广播出去 如果要在Intent传递额外数据,可以用Intent的putExtra()方法6.3 广播消息6.3 广播消息利用Intent发送广播消息,并添加了额外的数据,然后调用sendBroadcast()发生了广播消息的代码6.3 广播消息6.3 广播消息BroadcastReceiver BroadcastReceiver用于监听广播消息 可以在AndroidManifest.xml文件或在代码中注册一个BroadcastReceiver,并在其中使用Intent 过滤器指定要处理的广播消息 创建BroadcastReceiver需继承BroadcastReceiver类,并重载onReceive()方法。代码如下6.3 广播消息6.3 广播消息BroadcastReceiver的应用程序不需要一直运行,当Android系统接收到与之匹配的广播消息时,会自动启动此BroadcastReceiver 基于以上的特征,BroadcastReceiver适合做一些资源管理的工作 在BroadcastReceiver接收到与之匹配的广播消息后,onReceive()方法会被调用 onReceive()方法必须要在5秒钟执行完毕,否则Android系统会认为该组件失去响应,并提示用户强行关闭该组件 6.3 广播消息6.3 广播消息BroadcastReceiverDemo示例说明了如何在应用程序中注册BroadcastReceiver,并接收指定类型的广播消息 在点击“发生广播消息”按钮后,EditText控件中内容将以广播消息的形式发送出去, 示例内部的BroadcastReceiver将接收这个广播消息,并显示在用户界面的下方 6.3 广播消息6.3 广播消息BroadcastReceiverDemo.java文件中包含发送广播消息的代码,其关键代码如下 第3行代码创建Intent,将edu.hrbeu.BroadcastReceiverDem作为识别广播消息的字符串标识 第4行代码添加了额外信息 第5行代码调用sendBroadcast()函数发送广播消息 6.3 广播消息6.3 广播消息为了能够使应用程序中的BroadcastReceiver接收指定的广播消息,首先要在AndroidManifest.xml文件中添加Intent过滤器,声明BroadcastReceiver可以接收的广播消息 AndroidManifest.xml文件的完整代码如下6.3 广播消息6.3 广播消息 第14行代码中创建了一个节点 在第15行中声明了Intent过滤器的动作为“edu.hrbeu.BroadcastReceiverDemo”,这与BroadcastReceiverDemo.java文件中Intent的动作相一致,表明这个BroadcastReceiver可以接收动作为“edu.hrbeu.BroadcastReceiverDemo”的广播消息6.3 广播消息6.3 广播消息MyBroadcastReceiver.java文件创建了一个自定义的BroadcastReceiver,其核心代码如下 第1行代码首先继承了BroadcastReceiver类 第3行代码重载了onReveive()函数。当接收到AndroidManifest.xml文件定义的广播消息后,程序将自动调用onReveive()函数
本文档为【Android组件通信与广播消息】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_188154
暂无简介~
格式:ppt
大小:954KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2011-04-25
浏览量:36