第八章intent和broadcast面对面
Android学习笔记九之Intent
Android学习笔记九之IntentIntent简介前面我们介绍完Android系统的四大组件:Activity、Service、ContentProvider、BroadCastReceiver,现在,我们来介绍他们之间的联系枢纽————IntentIntent,意思是“意图”,Intent是Android系统提供的用于应用之间或应用内部Activity、Service、BroadCastReceiver之间进行交互的一种机制。
Intent在程序运行时连接不同的组件,我们可以通过Intent向Android系统发出请求,Android系统会根据请求选择合适的组件进行响应。
(ContentProvider本身就是一种通信机制,不需要通过Intent通信)如果AActivity想要向BActivity或者Android系统的其他组件传递参数,或者启动其他组件,不需要直接联系,通过Intent作为桥梁,简单的说就是,用Intent来作为中介联系其他组件。
例如可以通过下面这几种方法传递Intent实现启动Activity、启动Service或者绑定Service,发送广播启动Activity:Context.startActivity()或者调用Activity.startActivityForResult()启动Service或者绑定Service:Context.startService(),调用Context.bindService()来绑定一个service对象发送广播:Context.sendBroadcast(),Context.sendOrderedBroadcast(),或者Context.sendStickyBroadcast()Intent有两种:显式Intent和隐式Intent。
显式Intent通过具体的组件名去启动组件,一次只能启动一个组件;隐式Intent不指定具体的组件名,而是指定Intent的Action、category 等信息,交给Android系统去分析这个Intent,并帮我们选择合适的组件去启动,当有多个组件符合的时候,显示所有分组件给我们选择。
Android中的广播(BroadCast)详细介绍
Android中的⼴播(BroadCast)详细介绍什么是⼴播在Android中,Broadcast是⼀种⼴泛运⽤的在应⽤程序之间传输信息的机制。
我们拿⼴播电台来做个⽐⽅。
我们平常使⽤收⾳机收⾳是这样的:许许多多不同的⼴播电台通过特定的频率来发送他们的内容,⽽我们⽤户只需要将频率调成和⼴播电台的⼀样就可以收听他们的内容了。
Android中的⼴播机制就和这个差不多的道理。
电台发送的内容是语⾳,⽽在Android中我们要发送的⼴播内容是⼀个Intent。
这个Intent中可以携带我们要传送的数据。
电台通过⼤功率的发射器发送内容,⽽在Android中则是通过sendBroadcast这个⽅法来发送(很形象的名字吧)。
⽤户通过调整到具体的电台频率接受电台的内容。
⽽在Android中要接受⼴播中的内容则是通过注册⼀个BroadCastReceiver 来接收的。
只有发送⼴播的action和接收⼴播的action相同,接受者才能接受这个⼴播。
⼴播有什么⽤其实,在什么是⼴播的第⼀句就已经说明了⼴播有什么⽤了。
对了,笼统⼀点讲就是⽤来传输数据的。
具体⼀点说就是:1.实现了不同的程序之间的数据传输与共享,因为只要是和发送⼴播的action相同的接受者都能接受这个⼴播。
典型的应⽤就是android⾃带的短信,电话等等⼴播,只要我们实现了他们的action的⼴播,那么我们就能接收他们的数据了,以便做出⼀些处理。
⽐如说拦截系统短信,拦截骚扰电话等等 2.起到了⼀个通知的作⽤,⽐如在service中要通知主程序,更新主程序的UI等。
因为service是没有界⾯的,所以不能直接获得主程序中的控件,这样我们就只能在主程序中实现⼀个⼴播接受者专门⽤来接受service发过来的数据和通知了。
实现⼴播现在我们就来实现⼀个简单的⼴播程序。
Android提供了两种注册⼴播接受者的形式,分别是在程序中动态注册和在xml中指定。
他们之间的区别就是作⽤的范围不同,程序动态注册的接收者只在程序运⾏过程中有效,⽽在xml注册的接收者不管你的程序有没有启动有会起作⽤。
安卓面试题及答案详解版
安卓面试题及答案详解版1. 问题:什么是Android操作系统?答案: Android操作系统是一种基于Linux内核的开源操作系统,主要用于触屏移动设备,如智能手机和平板电脑。
它由Google公司开发并发布,允许设备制造商和开发者自由地修改和分发。
2. 问题:请解释Android的架构。
答案: Android架构从下到上分为四个层次:- 应用层:包含用户界面和应用程序。
- 应用框架层:提供应用程序开发接口(API)。
- 运行时环境层:包括Android核心库和Android运行时环境。
- Linux内核层:提供底层的硬件抽象层、内存管理、进程管理等功能。
3. 问题: Android应用是如何打包的?答案: Android应用通常使用APK(Android Package)格式进行打包。
APK文件是一个压缩文件,包含应用的代码、资源、资产、库和AndroidManifest.xml文件。
4. 问题:什么是Activity?答案: Activity是Android应用程序中的基本构建块,用于定义用户界面和用户交互。
每个Activity都是一个独立的屏幕,用户可以与之交互。
5. 问题:请解释Intent的概念。
答案: Intent是Android中用于请求操作的抽象描述符。
它可以用于启动Activity、启动服务或广播信息。
Intent可以显式地指定目标组件,也可以隐式地通过Intent Filter来匹配。
6. 问题:如何在Android中处理网络请求?答案:在Android中处理网络请求通常使用HTTP客户端库,如OkHttp或Retrofit。
这些库提供了简化的API来发送HTTP请求和接收响应。
7. 问题:解释Android中的Context对象。
答案: Context是Android中一个非常关键的类,它允许访问应用程序环境的全局信息。
Context可以用于启动Activity、获取资源、启动服务等。
Intent使用详解
Android Intent 使用整理在一个Android应用中,主要是由一些组件组成,(Activity,Service,ContentProvider,etc.)在这些组件之间的通讯中,由Intent协助完成。
正如网上一些人解析所说,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。
Intent在这里起着实现调用者与被调用者之间的解耦作用。
Intent传递过程中,要找到目标消费者(另一个Activity,IntentReceiver或Service),也就是Intent的响应者,有两种方法来匹配:1,显示匹配(Explicit):public TestB extents Activity{.........};public class Test extends Activity{......public void switchActivity(){Intent i = new Intent(Test.this, TestB.class);this.startActivity(i);}}代码简洁明了,执行了switchActivity()函数,就会马上跳转到名为TestB的Activity中。
2,隐式匹配(Implicit):隐式匹配,首先要匹配Intent的几项值:Action, Category, Data/Type,Component 如果填写了Componet就是上例中的Test.class)这就形成了显示匹配。
所以此部分只讲前几种匹配。
匹配规则为最大匹配规则,1,如果你填写了Action,如果有一个程序的Manifest.xml中的某一个Activity的IntentFilter段中定义了包含了相同的Action那么这个Intent就与这个目标Action匹配,如果这个Filter段中没有定义Type,Category,那么这个Activity就匹配了。
第8章 Activity和Intent(多个Activity之间的跳转)以及Activity的生命周期
1. Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("")); 2. startActivity(intent);
Intent的动作是Intent.ACTION_VIEW,根据URI 的数据类型来匹配动作 数据部分的URI是Web地址,使用 Uri.parse(urlString)方法,可以简单的把一个字符 串解释成Uri对象.对以Uri方式传送的数据,根据 Uri协议部分以最佳方式启动相应的Activity进行处 理。对于http:address将打开浏览器查看;对于 tel:address将打开拨号呼叫指定的电话号码
一个Intent对象包含一组信息:
Component name:要处理这个Intent对象的组件名 Action:Intent要完成的动作 Data:执行动作的 URI和MIME类型,不同的动作有不同的数 如果我们在启动一个 Activity 时使用这样的 据规格。 Intent 对象: Category:类别,为执行动作的附加信息,提供了额外的信 Intent intent =new Intent(); 息,有关于能够处理这个 Intent对象的组件种类。 intent.setAction("com.ultrawise.myaction"); Extras:附加信息 那么所有的 Action 列表中包含了 Flags:很多是用来指定 Android系统如何启动 activity ,还有 “com.ultrawise.myaction ”的 Activity 都将会匹 启动了activity 后如何对待它。 配成功。
隐式启动Activity
在AndroidManifest.xml文件里
2023年职场_android面试题及答案
2023年android面试题及答案2023年android面试题及答案篇一1. 横竖屏切换时候 activity 的生命周期1). 不设置 Activity 的 android:configChanges 时 , 切屏会重新调用各个生命周期 , 切横屏时会执行一次 , 切竖屏时会执行两次 .2). 设置 Activity 的 Android:configChanges=‖orientation‖时 , 切屏还是会重新调用各个生命周期 , 切横、竖屏时只会执行一次 .3). 设置 Activity 的 Android:configChanges=‖orientation|keyboardHidden‖时 , 切屏不会重新调用各个生命周期 , 只会执行 onConfigurationChanged 方法 .2.android 中的动画有哪几类,它们的特点和区别是什么 ?两种,一种是 Tween 动画、还有一种是 Frame 动画。
Tween 动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化 ; 另一种Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。
3. 一条最长的短信息约占多少 byte?中文70( 包括标点) ,英文160 ,160 个字节。
4.handler 机制的原理andriod 提供了 Handler 和 Looper 来满足线程间的通信。
Handler 先进先出原则。
Looper 类用来管理特定线程内对象之间的消息交换 (Message Exchange) 。
1)Looper: 一个线程可以产生一个 Looper 对象,由它来管理此线程里的Message Queue( 消息队列 ) 。
2)Handler: 你可以构造 Handler 对象来与 Looper 沟通,以便 push 新消息到 Message Queue 里; 或者接收 Looper 从 Message Queue 取出 ) 所送来的消息。
Android学习笔记08_BroadcastReceiver
BroadcastReceiver广播事件处理机制,和事件处理机制类似,只不过事件处理机制是程序组件级别的,而广播事件处理机制是系统级别的。
发送方不关心接收方是否接收这些数据,也不关心接收方如何处理这些数据,如何处理数据由接收方决定。
BroadcastReceiver用于监听被广播的事件(Intent)为了达到这个目的,BroadcastReceiver必须进行注册,注册的方法有以下两种:1、在应用程序的代码中进行注册(只有程序在执行状态才能接收到广播事件)2、在AndroidManifest.xml中进行注册(即使应用程序已经被关闭,仍然可以接收到广播事件)自定义Broadcase Receiver1.创建Intent,发出广播声明一个字符串定义广播ACTIONprivate static final String MY_ACTION = "jimmy.action.MY_ACTION";创建Intent对象,设置其Action属性和Extra属性,使用该Intent发出广播Intent intent = new Intent();intent.setAction(MY_ACTION);intent.putExtra("msg", "这是我自己定义的广播");sendBroadcast(intent);2.定义一个MyReceiver类该类继承BroadcastReceiver类,复写onReceive()方法接收广播,并显示信息public class MyReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context cxt, Intent intent) {// TODO Auto-generated method stubString msg = intent.getStringExtra("msg");Toast.makeText(cxt, msg, Toast.LENGTH_LONG).show();}}3.在AndroidManifest.xml配置文件中声明广播接收组件<receiver android:name=".MyReceiver"><intent-filter><action android:name="jimmy.action.MY_ACTION"></action></intent-filter></receiver>系统Broadcase Receiver1.标准广播Action,这些广播是系统自动发出的,我们直接定义事件接收器进行接收就可以使用系统消息了。
Intent深入详解课件
的Activity。
动。开发者可以通过设 ComponentName,或
置不同的Intent标志
者使用setClass()方法通
(如
过类名来指定。
FLAG_ACTIVITY_NEW_
TASK)来影响系统选择。
THANKS FOR WATCHING
感谢您的观看
通过setData()方法设置Intent携带 的数据,如URI或文件路径。
设置Intent动作
通过setAction()方法设置Intent的动 作,如打开网页、发送邮件等。
返回结果给调用者
setResult()方法
在目标组件中调用此方法,将结果数据和结果码传递回调用者。
onActivityResult()方法
附加数据(Extras)
总结词
提供额外的信息或参数。
详细描述
附加数据是Intent中用于传递额外信息的键值对集合。这些键值对可以是任何类型的数据,如字符串、整数、布 尔值等。附加数据提供了更灵活的方式来传递参数或信息给目标组件。
类别(Categories)
总结词
对Intent进行分类或标记。
详细描述
隐式启动
隐式启动是指不指定要启动的组件的 名称,而是通过指定Intent的动作、 类别和数据来让系统自动匹配可响应 的组件。
启动其他应用组件
启动Activity
通过Intent可以启动一个Activity,这是最常见的组件之一,用于实现用户界面交互。
启动Service
Service是一种在后台执行长时间运行操作的组件,不提供用户界面。通过Intent可以启 动一个Service来执行后台任务。
对于文件、图片等大 块数据,建议使用 ContentProvider或 文件共享等方式进行 传递,而不是通过 Intent。
安卓面试问答题
安卓面试问答题(总15页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--二、问答题1.说明使用操作栏为程序开发所带来的便利。
答案:操作栏代替了传统的标题栏功能,右侧用来显示“选项菜单”的菜单项,但所显示的内容,会根据操作栏所具有的空间不同而具有不同的显示方式。
在屏幕尺寸较小的设备上,操作栏会自动隐藏菜单项的文字,而仅现实菜单项的图标;而在屏幕尺寸较大的设备上,操作栏会同时现实菜单项的文字和图标。
操作栏提供多个实用的功能,包括(1)将“选项菜单”的菜单项现实在操作栏的右侧;(2)基于Fragment实现类似于Tab页的导航切换功能;(3)为导航提供可“拖拽—放置”的下拉列表;(4)可在操作栏上实现类似于“搜索框”的功能。
2.写出android中主要的三种数据存储方式。
答案一:数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络。
答案二:常用的数据存储方式:SharePreference存储、File存储(分为手机内存存储和SD卡存储)、SQLite数据库存储和网络存储。
答案三: 2.文件存储数据库方式4.内容提供器(Content provider)5. 网络存储方式3.简述android中的适配器作用,android有哪些适配器区别是什么答案:作用:把一些数据给弄得适当,适合以便于在View上显示。
我们常用的适配器一共有三个,ArrayAdapter,SimpleAdapter,SimpleCursorAdapter ,他们都是继承BaseAdapter其中以ArrayAdapter最为简单,只能展示一行字。
SimpleAdapter有最好的扩充性,可以自定义出各种效果。
SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
4.说明线程的两种实现方式是什么?答案:第一种方式:使用Runnable接口创建线程。
Android Intent和Bundle机制实例详解
Android Intent和Bundle机制实例详解Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service 之间的交互。
Intent这个英语单词的本意是“目的、意向”等,对于较少从事于大型平台开发工作的程序员来说,这可能是一个不太容易理解的抽象概念,因为它与我们平常使用的简单函数/方法调用,或者上节中提到的通过库调用接口的方式不太一样。
在Intent的使用中你看不到直接的函数调用,相对函数调用来说,Intent是更为抽象的概念,利用Intent所实现的软件复用的粒度是Activity/Service,比函数复用更高一些,另外耦合也更为松散。
Android中与Intent相关的还有Action/Category及Intent Filter等,另外还有用于广播的Intent,这些元素掺杂在一起,导致初学者不太容易迅速掌握Intent的用法。
在讲解这些名词之前,我们先来从下面的例子中感受一下Intent的一些基本用法,看看它能做些什么,之后再来思考这种机制背后的意义。
理解Intent的关键之一是理解清楚Intent的两种基本用法:一种是显式的Intent,即在构造Intent对象时就指定接收者,这种方式与普通的函数调用类似,只是复用的粒度有所差别;另一种是隐式的Intent,即Intent的发送者在构造Intent对象时,并不知道也不关心接收者是谁,这种方式与函数调用差别比较大,有利于降低发送者和接收者之间的耦合。
另外Intent除了发送外,还可用于广播,这些都将在后文进行详细讲述。
应用生命周期Android引入了一个全新的机制-应用程序生命周期(Life Cycle)。
多数情况下,一个Android应用运行在一个独立的Linux进程中应用进程的的生命周期(存活时间)不是由进程自己控制,而是由Android系统决定影响应用生命周期的主要因素包括:该进程对于用户的重要性,以及当前系统中还剩多少可用内存。
Intent详解
在你开始与拨号盘交互之前,你需要你理解你要使用的代码类型。
Andriod使用Intent在应用程序中定义工作。
一旦你掌握了Intents的使用,一个全新的应用程序开发世界将会想你敞开。
本节定义了Intent是什么和如何使用它。
一个Intent是Android从一个Activity(活动)传递信息到另外一个活动的方法。
你可以认为一个Intent是一个活动间交换的信息。
例如,假定你有一个活动需要来打开一个网页浏览器并且在Android设备上显示一个页面。
你的活动应当发送一个“在网页浏览器中打开某页的Intent(意图)”,就像一个WEB_SEARCH_ACTION的Intent,一个Android Intent解答器。
Intent解答器从语法上分析一个活动的列表并且选择最匹配你的Intent 的一个。
那就是,网页浏览器的活动。
Intent解答器然后传递你的网页到浏览器中并且启动网页浏览器活动。
Intents被分成两个主要目录● Activity Action Intents(活动动作意图)Intents用来呼叫应用程序以外的活动。
只有一个活动可以处理Intent。
例如,对于网页浏览器,你需要打开网页浏览器活动来显示一个页面。
● Broadcast Intents (广播意图)Intents 被送出到多个活动来处理。
一个被Android 发出的广播意图的例子就是,当前电池的电量。
任何活动处理这个意图并适时的反应。
——例如,如果电池电量低到一定程度,取消一个活动。
表格7-1 列出并且描述了通用的,可以使用活动动作意图。
正如你注意到的一样,大多数情况下,从Intent名字可以看出这个Intent是做什么的。
注意本章中的应用程序会用到列在表7-1中的Intents:CALL_ACTION 和DIAL_ACTION。
这些Intents使你有进入手机拨号和呼叫的能力。
表格7-2列出并描述了通用的广播意图。
当你需要为一个定义的Intent建立一个接受器时,请参考这个表。
android 手机开发技术 移动应用开发技术-教学大纲
无锡商业职业技术学院《移动应用开发技术》课程教学大纲课程代码:教育层次:专科层次学制:3年适用对象:初中起点高职□中职起点高职□高中起点高职■课程教学时数:90 学分数:6制订或修订执笔人:系(部)教研室主任审核意见签名:日期:系(部)教学主任审核意见签名:日期:院教学工作委员审核意见签名:日期:无锡商业职业技术学院《移动应用开发技术》教学大纲【课程类型】(理论+实践)课【适用专业】软件技术专业1.课程定位《移动应用开发技术》是软件技术专业的核心专业课,是一门实践性很强的课程,不仅要掌握Android的一些基本理论知识,更重要的是能够实际动手开发一些应用。
2.课程任务课程的内容主要包括理论部分和实践部分,理论部分移动开发基本概念。
其中理论部分主要包括资源访问、用户界面、组件使用、数据存储、互联网应用等。
实践部分是针对前面基础理论设计的案例实践,进一步巩固理论知识。
3.课程目标知识目标:掌握移动开发基本理论和概念、资源访问、用户界面、组件使用、数据存储、互联网应用等。
技能目标:熟悉开发环境的安装和配置,能够从事移动APP和移动互联网产品的设计、开发、测试、维护等工作,熟悉Android程序的发布流程等。
素养目标:养成诚实、守信、吃苦耐劳的思想品德;养成善于动脑、勤于思考的学习习惯;养成规范的软件代码编写习惯;具有良好的沟通能力和团队协作精神等。
4.教学内容第一讲初识Android1、认识Android2、Android的背景3、我的Android我做主4、真实体验—Android 模拟器5、更上一层楼,加入Android开发社区第二讲必先利其器—搭建Android开发环境1、你的爱机胜任吗—开发Android应用前的准备2、Wwindow开发环境搭建3、Linux一族— Ubuntu开发环境搭建4、Mac OS一族—苹果开发环境搭建第三讲Android SDK介绍1、Android SDK基础2、深入探寻Android SDK的密码3、重中之重—Android 典型包分析第四讲Android Market及应用发布1、Google Market产生背景与目的2、体验“选货”的乐趣—在G1上体验Market的使用3、Android开发活动及特色应用4、你也可以做东家—申请M arket帐号5、开张了—在Market上发布应用第五讲第一个应用HelloWorld1、HelloWorld应用分析2、调试项目第六讲磨刀不误砍柴工——Android应用程序结构介绍1、Android体系结构介绍2、Android应用程序组成3、Android应用工程文件组成第七讲良好的学习开端——Android基本组件介绍1、第一印象很重要——界面UI元素介绍2、我的美丽我做主——Android中应用界面布局3、不积跬步无以至千里——常用widget组件介绍4、友好的菜单——menu介绍与实例5、Android应用的灵魂——Intent和Activity介绍与实例6、用好列表,做好程序——列表(ListView)介绍与实例7、友好地互动交流——对话框(Dialog)介绍与实例8、温馨的提醒——Toast和Notification应用第八讲移动信息仓库——Android的数据存储操作1、Android数据存储概述2、轻轻地我保护——SharedPreferences存储3、谁的文件,谁主宰——文件存储4、打造自己的数据库存储——SQLite存储方式5、我的数据你来用——ContentProvider介绍6、再学一招——网络存储第九讲我来“广播”你的“意图”——Intent和Broadcast面对面1、Android应用程序的核心——Intent2、用广播告诉你——利用Intent来广播(BroadCast)事件3、应用实例详解第十讲一切为用户服务——Service应用实例1、认识Service2、使用Service3、Service的生命周期4、实例学习Service第十一讲开发Android应用的基本步骤1、兵马未动粮草先行——应用规划及架构设计2、应用开发步骤3、成功就在眼前——应用测试和发布钱了——发布到AndroidMarket5.课程考核内容及方式课程考核方式该课程的考核改变单一的终结性评价的方法,采用过程考核和结果考核相结合、以及实践考核的方法。
Intent 详解
Intent 详解概念:Intent是执行某操作的一个抽象描述概述:Intent包含四个方面的内容:Action ,data Catagories,extrasAction要执行的动作(action)的一个简要描述. 通过setAction()方法或在清单文件AndroidManifest.xml中设置。
默认为:DEFAULT。
标准的Activity Actions:这些Action是被通过startActivity (启动),其中最常用的连个∙ACTION_MAIN:Android Application的入口,每个Android应用必须且只能包含一个此类型的Action声明。
∙ACTION_VIEW:系统根据不同的Data类型,通过已注册的对应Application显示数据。
∙ACTION_ATTACH_DATA:表明某些数据可以被附加到其他地方,例如,照片可以附加到联系人中,这主要由接受着决定数据被附加到那里,而不是由Intent决定最终目的地。
∙ACTION_EDIT:系统根据不同的Data类型,通过已注册的对应Application编辑示数据∙ACTION_PICK:从数据中得到相应的数据项∙ACTION_CHOOSER:在程序执行前,显示多个可以选择的Activity,供用户选择∙ACTION_GET_CONTENT:返回用户指定的数据类型(与ACTION_PICK不同的是,这里只是指定用户想要的数据类型,而不是数据的存储URI或者其他用户可以得到数据的路径)∙ACTION_DIAL:打开系统默认的拨号程序,如果Data中设置了电话号码,则自动在拨号程序中输入此号码。
∙ACTION_CALL:直接呼叫Data中所带的号码。
∙ACTION_SEND:由用户指定发送方式进行数据发送操作。
∙ACTION_SENDTO:系统根据不同的Data类型,通过已注册的对应Application进行数据发送操作。
安卓面试题及答案详解
请 一下Intent 和Intent Filter。
Intent 在Android 中被翻译为"意图",熟语来讲就是目的,他们是三种应用程序基本组件—activity,service和broadcast receiver 之间互相激活的手段。
在调用Intent 名称时使用ComponentName也就是类的全名时为显示调用。
这种方式一般用于应用程序的内部调用, 因为你不一定会知道别人写的类的全名。
我们来看看隐式Intent 怎么用? 首先我们先配置我们的Activity 的Intent Filter<intent-filter><actionandroid:name="com.example.project.SHOW_CURRENT" /></intent-filter>这样在调用的时候指定Intent 的action,系统就是自动的去对比是哪个intent-filter 符合我们的Activity,找到后就会启动Activity。
一个intent filter 是IntentFilter类的实例, 但是它一般不出现在代码中,而是出现在android Manifest 文件中, 以<intent-filter>的形式. (有一个例外是broadcast receiver 的intent filter 是使用Context.registerReceiver()来动态设定的, 其intent filter 也是在代码中创建的.) 一个filter 有action, data, category 等字段. 一个隐式intent 为了能被某个intent filter 接受, 必须通过3 个测试. 一个intent 为了被某个组件接受, 则必须通过它所有的intent filter 中的一个.请口述一下Activity 生命周期。
Android中跨历程通讯的4种方式(三)
Android中跨历程通讯的4种方式(三)android系统中应用程序之间不能共享内存。
因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些。
Android中跨历程通讯的4种方式中,长沙Android培训在在这里告诉大家继续最后两种方式。
方式三:广播(Broadcast)广播是一种被动跨进程通讯的方式。
当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。
这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通。
在应用程序中发送广播比较简单。
只需要调用sendBroadcast方法即可。
该方法需要一个Intent对象。
通过Intent对象可以发送需要广播的数据。
先建一个android工程:sendbroadcast。
在XML布局文件中放两个组件:EditText 和Button,当单击按钮后,会弹出显示EditText组件中文本的对话框,关闭对话框后,会使用sendBroadcast方法发送消息,并将EditText组件的文本通过Intent对象发送出去。
完整的代码如下:package net.blogjava.mobile.sendbroadcast;... ...public class Main extends Activity implements OnClickListener{private EditText editText;@Overridepublic void onClick(View view){new AlertDialog.Builder(this ).setMessage(editText.getText().toString()).setPositiveButton("确定" , null ).show();// 通过Intent类的构造方法指定广播的IDIntent intent = new Intent("net.blogjava.mobile.MYBROADCAST" );// 将要广播的数据添加到Intent对象中intent.putExtra("text" , editText.getText().toString());// 发送广播sendBroadcast(intent);}... ...}发送广播并不需要在AndroidManifest.xml文件中注册,但接收广播必须在AndroidManifest.xml文件中注册receiver。
Android系统中的广播(Broadcast)机制简要介绍和学习计划
在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制;这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用;本文通过一个简单的例子来学习Android系统的广播机制,为后续分析广播机制的源代码作准备。
在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它们之间可以用来通信的方式就更多了,这样看来,广播机制似乎是多余的。
然而,广播机制却是不可替代的,它和Binder机制不一样的地方在于,广播的发送者和接收者事先是不需要知道对方的存在的,这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成。
在软件工程中,是非常强调模块之间的高内聚低耦合性的,不然的话,随着系统越来越庞大,就会面临着越来越难维护的风险,最后导致整个项目的失败。
Android应用程序的组织方式,可以说是把这种高内聚低耦合性的思想贯彻得非常透彻,在任何一个Activity中,都可以使用一个简单的Intent,通过startActivity或者startService,就可以把另外一个Activity或者Service启动起来为它服务,而且它根本上不依赖这个Activity或者Service的实现,只需要知道它的字符串形式的名字即可,而广播机制更绝,它连接收者的名字都不需要知道。
不过话又说回来,广播机制在Android系统中,也不算是什么创新的东西。
如果读者了解J2EE或者COM,就会知道,在J2EE中,提供了消息驱动Bean(Message-Driven Bean),用来实现应用程序各个组件之间的消息传递;而在COM中,提供了连接点(Connection Point)的概念,也是用来在应用程序各个组间间进行消息传递。
安卓应用核心 Intent
Android 如何知道应用程序能够处理某种类型的Intent 请求呢?
Android 如何知道应用程序能够处理某种类型的Intent 请 求呢? 这需要应用程序在AndroidManifest.xml中声明自 己所含组件的过滤器(即可以匹配哪些 Intent 请求)。一 个没有声明Intent Filter的组件只能响应指明自己名字的显 式Intent请求,而无法响应隐式Intent请求。而一个声明了 Intent Filter的组件既可以响应显式Intent请求,也可以响 应隐式Intent请求。
1.种类(category),比如我们常见的 LAUNCHER_CATEGORY 就 是表示这是一类应用程序。 2.类型(type),表示数据的类型,这是隐性Intent定位目标的重要依 据。 3.组件(component),比较常见例子中用的是setClass,不过也可 以用setComponent来设置intent跳转的前后两个类实例。 4.附加数据(extras),在ContentURI之外还可以附加一些信息,它 是Bundle类型的对象。
Intent
Intent是一种运行时绑定(run-time binding) 机制,它能在程序运行的过程中连接两个 不同的组件。通过Intent,你的程序可以向 Android表达某种请求或者意愿,Android会 根据意愿的内容选择适当的组件来完成请 求。
Intent
Intent对象抽象地描述了要执行的操作, 其描述的基本内容可以分为组件名称、 Action(动作)、Data(数据)、Category (类别)、Extra (附加信息)和 Flag (标 志位)6部分。
常见Extra
EXTRA_BCC 装有邮件密送地址的字符串数组
intent与anctivity详解
Intent与anctivity详解隐式启动Activity的intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data,可以是全部或部分匹配同样适用于Service和BroadcastReceiver,下面是以Activity为例MainActivity.java --主ActivityTestActivity.java --需要隐式启动的Activity(1) 根据Action和Category来进行匹配<activity android:name=".TestActivity" android:label="TestActivity"><intent-filter ><action android:name="cc.android/myaction.leo"/><category android:name="android.intent.category.DEFAULT"/></intent-filter></activity>在MainActivity.java里启动它:intent.setAction( "cc.android/myaction.leo");//不加下面这行也行,因为intent的这个属性默认值即系Intent.CATEGORY_DEFAULTintent.addCategory(Intent.CATEGORY_DEFAULT);startActivity( intent );总结:a.在某个Activity里用startActivity()方法发送一个intent,这个intent设定了一些条件,比如用方法setAction(),addCategory()设定了两个属性,发送了这个intent之后,android会去系统里保存的MainManifest.xml清单(假设这个系统存放全部apk清单的文件为MainManifest.xml)里查找符合这两个属性的activity,然后启动它。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Bundle类的作用
Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它 提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(), putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。Bundle的内 部实际上是使用了HashMap<String, Object>类型的变量来存放putXxx()方法放入的值:
在调用Bundle对象的getXxx()方法时,方法内部会从该变量中获取数据,然后对数据进行类型转 换,转换成什么类型由方法的Xxx决定,getXxx()方法会把转换后的值返回。
北京传智播客教育
为Intent附加数据的两种写法
第一种写法,用于批量添加数据到Intent:
public final class Bundle implements Parcelable, Cloneable { ...... Map<String, Object> mMap; public Bundle() { mMap = new HashMap<String, Object>(); ...... } public void putString(String key, String value) { mMap.put(key, value); } public String getString(String key) { Object o = mMap.get(key); return (String) o; ........//类型转换失败后会返回null,这里省略了类型转换失败后的处理代码 } }
第二种写法:只不过这种写法是把数据一个个地添加进Intent,使用起来比较方 便,而且只要编写少量的代码。
Intent intent = new Intent(); intent.putExtra("name", "传智播客");
Intent提供了各种常用类型重载后的putExtra()方法,如: putExtra(String name, String value)、 putExtra(String name, long value),在putExtra()方法内部会判断当前Intent对象内部是否已经存在一个Bundle对象,如果不存在 就会新建Bundle对象,以后调用putExtra()方法传入的值都会存放于该Bundle对象,下面是Intent的 putExtra(String name, String value)方法代码片断: public class Intent implements Parcelable { private Bundle mExtras;
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="/apk/res/android" package="edu.hrbeu.IntentDemo" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".IntentDemo" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="UNCHER" />
Android应用程序中,用户使用的每个组件都必须在 AndroidManifest.xml文件中的<application>节点内定义 <application>节点下共有两个<activity>节点,分别代表 应用程序中所使用的两个Activity,IntentDemo和 ActivityToStart
打开新的Activity,并传递若干个参数给它
第二种:打开新的Activity,并传递若干个参数给它: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { ....... button.setOnClickListener(new View.OnClickListener(){//点击该按钮会打开一个新的Activity public void onClick(View v) { Intent intent = new Intent(MainActivity.this, NewActivity.class) Bundle bundle = new Bundle();//该类用作携带数据 bundle.putString("name", "传智播客"); bundle.putInt("age", 4); intent.putExtras(bundle);//附带上额外的数据 startActivity(intent); }}); } } 在新的Activity中接收前面Activity传递过来的参数: public class NewActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { ........ Bundle bundle = this.getIntent().getExtras(); String name = bundle.getString("name"); int age = bundle.getInt("age"); } 北京传智播客教育 }
Байду номын сангаас
Intent intent = new Intent(IntentDemo.this, ActivityToStart.class); startActivity(intent);
} });
在点击事件的处理函数中,Intent构造函数的第1个参数是应用程序上下文 ,程序中的应用程序上下文就是IntentDemo;第2个参数是接收Intent的目 标组件,使用的是显式启动方式,直接指明了需要启动的Activity
5.1.1 启动Activity 显式启动
使用Intent显式启动Activity 创建一个Intent 指定当前的应用程序上下文以及要启动的Activity 把创建好的这个Intent作为参数传递给startActivity()方法
1. Intent intent = new Intent(IntentDemo.this, ActivityToStart.class); 2. startActivity(intent);
5.1.1 启动Activity 显式启动
点击“启动Activity”按钮后,程序启动ActivityToStart 这个Activity
5.1.1 启动Activity 显式启动
在AndroidManifest.xml文件中注册上面这两个Activity, 应使用<activity>标签,嵌套在<application>标签内部
1.5Android 模拟器
5.1.1 启动Activity
</activity>
显式启动
14. <activity android:name=".ActivityToStart" 15. android:label="@string/app_name"> 16. </activity> 17. </application> 18. <uses-sdk android:minSdkVersion="3" /> 19. </manifest>
5.1.1 启动Activity
显式启动 在IntentDemo.java文件中,包含了显示使用Intent启动Activity的核心代码
Button button = (Button)findViewById(R.id.btn); button.setOnClickListener(new OnClickListener(){ public void onClick(View view){
public Intent putExtra(String name, String value) { if (mExtras == null) { mExtras = new Bundle(); } mExtras.putString(name, value); return this; }
北京传智播客教育
第5章 Intent
课程目标
了解使用Intent进行组件通信的原理 掌握使用Intent启动Activity的方法
掌握获取Activity返回值的方法
了解Intent过滤器的原理与匹配机制 掌握发送和接收广播消息的方法
5.1 Intent
Intent是一个动作的完整描述,包含了动作的产生组件、接 收组件和传递的数据信息 Intent也可称为一个在不同组件之间传递的消息,这个消 息在到达接收组件后,接收组件会执行相关的动作 Intent为Activity、Service和BroadcastReceiver等组件提供 交互能力 Intent的用途