(5)第6章组件通信与广播消息

上传人:cl****1 文档编号:588077839 上传时间:2024-09-07 格式:PPT 页数:26 大小:3.62MB
返回 下载 相关 举报
(5)第6章组件通信与广播消息_第1页
第1页 / 共26页
(5)第6章组件通信与广播消息_第2页
第2页 / 共26页
(5)第6章组件通信与广播消息_第3页
第3页 / 共26页
(5)第6章组件通信与广播消息_第4页
第4页 / 共26页
(5)第6章组件通信与广播消息_第5页
第5页 / 共26页
点击查看更多>>
资源描述

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

1、第第6章章 组件通信与广播消息组件通信与广播消息 本章学习目标n了解使用Intent进行组件通信的原理n掌握使用Intent启动Activity的方法n掌握获取Activity返回值的方法n掌握发送和接收广播消息的方法6.1 Intent简介 nIntent是一个动作的完整描述,包含了动作的产生组件、接收组件和传递的数据信息qIntent可在不同组件之间传递的消息,这个消息在到达接收组件后,接收组件会执行相关的动作q Intent为Activity、Service和BroadcastReceiver等组件提供交互能力qIntent的用途n启动Activity和Servicen在Android系

2、统上发布广播消息q广播消息可以是接收到特定数据或消息,也可以是手机的信号变化或电池的电量过低等信息6.1 Intent简介n6.1.1 启动Activityq在Android系统中,应用程序一般都有多个Activity,Intent可以实现不同Activity之间的切换和数据传递q启动Activity方式n显式启动,必须在Intent中指明启动的Activity所在的类所在的类所在的类所在的类n隐式启动, Android系统根据Intent的动作和数据来决定启动哪一个Activity,也就是说在隐式启动时,Intent中只包含需要执行的动作和所包含的数据,而无需指明具体启动哪一个Activit

3、y,选择权有Android系统和最终用户来决定6.1 Intent简介n6.1.1 启动Activityq显式启动n创建一个Intentn指定当前的应用程序上下文以及要启动的Activityn把创建好的这个Intent作为参数传递给startActivity()方法1.Intent intent = new Intent(IntentDemo.this, ActivityToStart.class);2.startActivity(intent);6.1 Intent简介n6.1.1 启动Activityq显式启动n下面用IntentDemo示例说明如何使用Intent启动新的Activity

4、。IntentDemo示例包含两个Activity,分别是IntentDemoActivity和NewActivity。n程序默认启动的Activity是IntentDemo,在用户点击“启动Activity”按钮后,程序启动的Activity是NewActivity 6.1 Intent简介n6.1.1 启动Activityq显式启动n在IntentDemo示例中使用了两个Activity,因此需要在AndroidManifest.xml文件中注册这两个Activity。注册Activity应使用标签,嵌套在标签内部。6.1 Intent简介n6.1.1 启动Activityq显式启动nAn

5、droidManifest.xml文件代码如下 1.1.3.4.5.6.7.8.10.11.6.1 Intent简介n6.1.1 启动Activityq显式启动nAndroid应用程序中,用户使用的每个组件都必须在用户使用的每个组件都必须在AndroidManifest.xml文件中的文件中的节点内定节点内定义义。在上面的代码中,节点下共有两个节点,分别代表应用程序中所使用的两个Activity,IntentDemoActivity和NewActivity。6.1 Intent简介n6.1.1 启动Activityq显式启动n在IntentDemoActivity.java文件中,包含了使用I

6、ntent启动Activity的核心代码: 1.Button button = (Button)findViewById(R.id.btn);button.setOnClickListener(new OnClickListener()public void onClick(View view)Intent intent = new Intent(IntentDemoActivity.this, NewActivity.class);1.startActivity(intent);2.3.);6.1 Intent简介n6.1.1 启动Activityq显式启动n在点击事件的处理函数中,Inte

7、nt构造函数的第1个参数是应用程序上下文,在这里就是IntentDemoActivity;第2个参数是接收Intent的目标组件,这里使用的是显式启动方式,直接指明了需要启动的Activity。6.1 Intent简介n6.1.1 启动Activityq隐式启动n隐式启动的好处在于不需要指明需要启动哪一个Activity,而由Android系统来决定,这样有利于降低组件之间的耦合度。n选择隐式启动Activity,Android系统会在程序运行时解析Intent,并根据一定的规则对Intent和Activity进行匹配,使Intent上的动作、数据与Activity完全吻合。n匹配的组件可以是

8、程序本身的Activity,也可以是Android系统内置的Activity,还可以是第三方应用程序提供的Activity。n因此,这种方式强调了Android组件的可复用性。 6.1 Intent简介n6.1.1 启动Activityq隐式启动n如果程序开发人员希望启动一个浏览器,查看指定的网页内容,却不能确定具体应该启动哪一个Activity,此时则可以使用Intent的隐式启动方式,由Android系统在程序运行时决定具体启动哪一个应用程序的Activity来接收这个Intent(什么应用场景(什么应用场景?)?)n程序开发人员可以将浏览动作和Web地址作为参数传递给Intent,And

9、roid系统则通过匹配动作和数据格式,找到最适合于此动作和数据格式的组件。 1.Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(http:/.hk);startActivity(intent);6.1 Intent简介n6.1.1 启动Activityq隐式启动nIntent的动作是Intent.ACTION_VIEW,数据是Web地址,使用Uri.parse(urlString)方法,可以简单的把一个字符串解释成Uri对象。Android系统在匹配Intent时,首先根据动作Intent.ACTION_VIEW,得知需要启动具

10、备浏览功能的Activity,但具体是浏览电话号码还是浏览网页,还需要根据URI的数据类型来做最后判断。因为数据提供的是Web地址http:/,所以最终可以判定Intent需要启动具有网页浏览功能的Activity。在缺省情况下,Android系统会调用内置的Web浏览器。6.1 Intent简介n6.1.1 启动Activityq隐式启动nIntent的语法如下:1.Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlString);6.1 Intent简介n6.1.1 启动Activityq隐式启动nIntent构造函数的

11、第1个参数是Intent需要执行的动作,Android系统支持的常见动作字符串常量可以参考表。第2个参数是URI,表示需要传递的数据。动作动作说明说明ACTION_ANSWER打开接听电话的Activity,默认为Android内置的拨号界面ACTION_CALL打开拨号盘界面并拨打电话,使用Uri中的数字部分作为电话号码ACTION_DELETE打开一个Activity,对所提供的数据进行删除操作ACTION_DIAL打开内置拨号界面,显示Uri中提供的电话号码ACTION_EDIT打开一个Activity,对所提供的数据进行编辑操作ACTION_INSERT打开一个Activity,在提供

12、数据的当前位置插入新项ACTION_PICK启动一个子Activity,从提供的数据列表中选取一项ACTION_SEARCH启动一个Activity,执行搜索动作ACTION_SENDTO启动一个Activity,向数据提供的联系人发送信息ACTION_SEND启动一个可以发送数据的ActivityACTION_VIEW最常用的动作,对以Uri方式传送的数据,根据Uri协议部分以最佳方式启动相应的Activity进行处理。对于http:address将打开浏览器查看;对于tel:address将打开拨号界面并呼叫指定的电话号码ACTION_WEB_SEARCH打开一个Activity,对提供的

13、数据进行Web搜索6.1 Intent简介n6.1.1 启动Activityq隐式启动nWebViewIntentDemo示例说明了如何隐式启动Activity,用户界面6.1 Intent简介n6.1.1 启动Activityq隐式启动n当用户在文本框中输入Web地址后,通过点击“浏览此URL”按钮,程序根据用户输入的Web地址生成一个Intent,并以隐式启动的方式调用Android内置的Web浏览器,并打开指定的Web页面。本例输入的Web地址http:/.hk,打开页面后的效果如图6.3 广播消息n广播消息qIntent的另一种用途是发送广播消息,应用程序和Android系统都可以使用

14、Intent发送广播消息,广播消息的内容可以与应用程序密切相关的数据信息,也可以Android的系统信息,例如网络连接变化、电池电量变化、接收到短信或系统设置变化等。q如果应用程序注册了BroadcastReceiver,则可以接收到指定的广播消息。 q使用Intent发送广播消息非常简单,只需创建一个Intent,并调用sendBroadcast()函数就可把Intent携带的信息广播出去。q但需要注意的是,在构造Intent时必须定义一个全局唯一的字符串,用来标识其要执行的动作,通常使用应用程序包的名称。q如果要在Intent传递额外数据,可以用Intent的putExtra()方法。下面

15、的代码构造用于广播消息的Intent,并添加了额外的数据,然后调用sendBroadcast()发送广播消息:6.3 广播消息nsendBroadcast()代码nBroadcastReceiver用于监听广播消息,可以在AndroidManifest.xmlAndroidManifest.xml文件或在代码中注册一个文件或在代码中注册一个BroadcastReceiverBroadcastReceiver,并使用Intent过滤器指定要处理的广播消息。1.String UNIQUE_STRING = edu.hrbeu.BroadcastReceiverDemo;Intent intent

16、= new Intent(UNIQUE_STRING);intent.putExtra(key1, value1);intent.putExtra(key2, value2);1.sendBroadcast(intent);6.3 广播消息nonReceive()方法q创建BroadcastReceiver需继承BroadcastReceiver类,并重载onReceive()方法。示例代码如下:q当Android系统接收到与注册BroadcastReceiver匹配的广播消息时,Android系统会自动调用这个BroadcastReceiver接收广播消息。q在BroadcastReceiv

17、er接收到与之匹配的广播消息后,onReceive()方法会被调用(事件处理函数),但onReceive()方法必须要在5秒钟执行完毕,否则Android系统会认为该组件失去响应,并提示用户强行关闭该组件。 1.public class MyBroadcastReceiver extends BroadcastReceiver Overridepublic void onReceive(Context context, Intent intent) /TODO: React to the Intent received.1.2.6.3 广播消息nBroadcastReceiverDemo示例q

18、BroadcastReceiverDemo示例说明了如何在应用程序中注册BroadcastReceiver组件,并指定接收广播消息的类型。qBroadcastReceiverDemo示例的界面如图所示,在点击“发生广播消息”按钮后,EditText控件中内容将以广播消息的形式发生出去q示例内部的BroadcastReceiver将接收这个广播消息,并显示在用户界面的下方。 6.3 广播消息nBroadcastReceiverDemo示例用户界面6.3 广播消息nBroadcastReceiverDemo示例qAndroidManifest.xml文件中包含发送广播消息的代码,其关键代码如下 1

19、.2.3.4.5.6.7.7.8.8.9.9.action android:name=edu.hrbeu.BroadcastReceiverDemo /10.10. 1.6.3 广播消息nBroadcastReceiverDemo示例q在代码的第14行中创建了一个节点,在第15行中声明了Intent过滤器的动作为“edu.hrbeu.BroadcastReceiverDemo”,q这与BroadcastReceiverDemoActivity.java文件中Intent的动作相一致,表明这个BroadcastReceiver可以接收动作为“edu.hrbeu.BroadcastReceiver

20、Demo”的广播消息 6.3 广播消息nBroadcastReceiverDemo示例qMyBroadcastReceiver.java文件创建了一个自定义的BroadcastReceiver,其核心代码如下: q代码第1行首先继承了BroadcastReceiver类,并在第3行重载了onReveive()函数。当接收到AndroidManifest.xml文件定义的广播消息后,程序将自动调用onReveive()函数进行消息处理。q代码第4行通过调用getStringExtra()函数,从Intent中获取标识为message的字符串数据,并使用Toast()函数将信息显示在界面1.public class MyBroadcastReceiver extends BroadcastReceiver Overridepublic void onReceive(Context context, Intent intent) String msg = intent.getStringExtra(message);1.Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();2.3.

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

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