您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Android 组件通信与广播消息
第6章组件通信与广播消息本章学习目标了解使用Intent进行组件通信的原理掌握使用Intent启动Activity的方法掌握获取Activity返回值的方法了解Intent过滤器的原理与匹配机制掌握发送和接收广播消息的方法6.1IntentIntent是一个动作的完整描述,包含了动作的产生组件、接收组件和传递的数据信息Intent也可称为一个在不同组件之间传递的消息,这个消息在到达接收组件后,接收组件会执行相关的动作Intent为Activity、Service和BroadcastReceiver等组件提供交互能力Intent的用途启动Activity和Service在Android系统上发布广播消息广播消息可以是接收到特定数据或消息,也可以是手机的信号变化或电池的电量过低等信息6.1Intent6.1.1启动Activity在Android系统中,应用程序一般都有多个Activity,Intent可以实现不同Activity之间的切换和数据传递启动Activity方式显式启动,必须在Intent中指明启动的Activity所在的类隐式启动,Android系统根据Intent的动作和数据来决定启动哪一个Activity,也就是说在隐式启动时,Intent中只包含需要执行的动作和所包含的数据,而无需指明具体启动哪一个Activity,选择权有Android系统和最终用户来决定6.1Intent6.1.1启动Activity显式启动使用Intent显式启动Activity创建一个Intent指定当前的应用程序上下文以及要启动的Activity把创建好的这个Intent作为参数传递给startActivity()方法1.Intentintent=newIntent(IntentDemo.this,ActivityToStart.class);2.startActivity(intent);6.1Intent6.1.1启动Activity显式启动IntentDemo示例说明如何使用Intent启动新的ActivityIntentDemo示例包含两个Activity类IntentDemoActivityToStart程序启动是默认启动IntentDemo这个Activity6.1Intent6.1.1启动Activity显式启动点击“启动Activity”按钮后,程序启动ActivityToStart这个Activity6.1Intent6.1.1启动Activity显式启动在AndroidManifest.xml文件中注册上面这两个Activity,应使用activity标签,嵌套在application标签内部1.?xmlversion=1.0encoding=utf-8?2.manifestxmlns:android==edu.hrbeu.IntentDemo4.android:versionCode=15.android:versionName=1.06.applicationandroid:icon=@drawable/iconandroid:label=@string/app_name7.activityandroid:name=.IntentDemo8.android:label=@string/app_name9.intent-filter10.actionandroid:name=android.intent.action.MAIN/11.categoryandroid:name=android.intent.category.LAUNCHER/12./intent-filter6.1Intent6.1.1启动Activity显式启动Android应用程序中,用户使用的每个组件都必须在AndroidManifest.xml文件中的application节点内定义application节点下共有两个activity节点,分别代表应用程序中所使用的两个Activity,IntentDemo和ActivityToStart13./activity14.activityandroid:name=.ActivityToStart15.android:label=@string/app_name16./activity17./application18.uses-sdkandroid:minSdkVersion=3/19./manifest6.1Intent6.1.1启动Activity显式启动在IntentDemo.java文件中,包含了显示使用Intent启动Activity的核心代码在点击事件的处理函数中,Intent构造函数的第1个参数是应用程序上下文,程序中的应用程序上下文就是IntentDemo;第2个参数是接收Intent的目标组件,使用的是显式启动方式,直接指明了需要启动的Activity1.Buttonbutton=(Button)findViewById(R.id.btn);2.button.setOnClickListener(newOnClickListener(){3.publicvoidonClick(Viewview){4.Intentintent=newIntent(IntentDemo.this,ActivityToStart.class);5.startActivity(intent);6.}7.});6.1Intent6.1.1启动Activity隐式启动优点:不需要指明需要启动哪一个Activity,而由Android系统来决定,有利于使用第三方组件隐式启动Activity时,Android系统在应用程序运行时解析Intent,并根据一定的规则对Intent和Activity进行匹配,使Intent上的动作、数据与Activity完全吻合匹配的Activity可以是应用程序本身的,也可以是Android系统内置的,还可以是第三方应用程序提供的。因此,这种方式更加强调了Android应用程序中组件的可复用性6.1Intent6.1.1启动Activity隐式启动在缺省情况下,Android系统会调用内置的Web浏览器Intent的动作是Intent.ACTION_VIEW,根据URI的数据类型来匹配动作数据部分的URI是Web地址,使用Uri.parse(urlString)方法,可以简单的把一个字符串解释成Uri对象Intent的语法如下Intent构造函数的第1个参数是Intent需要执行的动作第2个参数是URI,表示需要传递的数据1.Intentintent=newIntent(Intent.ACTION_VIEW,Uri.parse());2.startActivity(intent);Intentintent=newIntent(Intent.ACTION_VIEW,Uri.parse(urlString));6.1Intent6.1.1启动Activity隐式启动Android系统支持的常见动作字符串常量表动作说明ACTION_ANSWER打开接听电话的Activity,默认为Android内置的拨号盘界面ACTION_CALL打开拨号盘界面并拨打电话,使用Uri中的数字部分作为电话号码ACTION_DELETE打开一个Activity,对所提供的数据进行删除操作ACTION_DIAL打开内置拨号盘界面,显示Uri中提供的电话号码ACTION_EDIT打开一个Activity,对所提供的数据进行编辑操作ACTION_INSERT打开一个Activity,在提供数据的当前位置插入新项ACTION_PICK启动一个子Activity,从提供的数据列表中选取一项ACTION_SEARCH启动一个Activity,执行搜索动作ACTION_SENDTO启动一个Activity,向数据提供的联系人发送信息ACTION_SEND启动一个可以发送数据的ActivityACTION_VIEW最常用的动作,对以Uri方式传送的数据,根据Uri协议部分以最佳方式启动相应的Activity进行处理。对于http:address将打开浏览器查看;对于tel:address将打开拨号呼叫指定的电话号码ACTION_WEB_SEARCH打开一个Activity,对提供的数据进行Web搜索6.1Intent6.1.1启动Activity隐式启动WebViewIntentDemo示例说明如何隐式启动Activity6.1Intent6.1.1启动Activity隐式启动当用户在文本框中输入要访问网址后,通过点击“浏览此URL”按钮,程序根据用户输入的网址生成一个Intent,并以隐式启动的方式调用Android内置的Web浏览器,并打开指定的Web页面本例输入的网址是哈尔滨工程大学的主站地址,地址是:6.1.2获取Activity返回值在上一小节IntentDemo示例中,通过使用startActivity(Intent)方法启动Activity后,启动后的两个Activity之间相互独立,没有任何的关联在很多情况下,后启动的Activity是为了让用户对特定信息进行选择,在关闭这个Activity后,用户的选择信息需要返回给未关闭的那个Activity按照Activity启动的先后顺序,先启动的称为父Activity,后启动的称为子Activity如果需要将子Activity的部分信息返回给父Activity,则可以使用Sub-Activity的方式去启动子Activity6.1Intent6.1.2获取Activity返回值获取子Activity的返回值,一般可以分为以下三个步骤以Sub-Activity的方式启动子Activity设置子Activity的返回值在父Activity中获取返回值6.1Intent6.1.2获取Activity返回值以Sub-Activity的方式启动子Activity调用startActivityForResult(Intent,requestCode)函数参数Intent用于决定启动哪个Activity参数requestCode是唯一的标识子Activity的请求码显式启动子Activity的代码如下隐式启动子Activity的代码如下1.intSUBACTIVITY1=1;2.Intentintent=newIntent(this,SubActivity1.class);3.startActivityForResult(intent,SUBACTIVITY1);1.intSUBACTIVITY2=2;2.Uriuri=Uri.parse(content://contacts/people);3.Intentintent=newIntent(Intent.ACTION_PICK,uri);4.startActivityForResult(intent,SUBACTIVITY2);6.1Intent6.1.2获取Activity返回值设置子Activity的返回值在子Activity调用finish()函数关闭前,调用setResult()函数将所需的数据返回给父ActivitysetResult()函数有两个参数结果码返回值6.1Intent6.1.2获取Activity返回值设置子Activity的返回值结果码表明了子Activity的返回状态,通常为Activity.RESULT_OK或者Ac
本文标题:Android 组件通信与广播消息
链接地址:https://www.777doc.com/doc-3301746 .html