Android之Intent详解.ppt_第1页
Android之Intent详解.ppt_第2页
Android之Intent详解.ppt_第3页
Android之Intent详解.ppt_第4页
Android之Intent详解.ppt_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

什么是intent,Intent是一种运行时绑定(runtimebinding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION请求给Android,Android会根据Intent的内容,查询各组件注册时的声明的IntentFilter,找到网页浏览器Activity来浏览网页。,Android如何解析Intent,在应用中,我们可以以两种形式来使用Intent:直接Intent:指定了component属性的Intent(调用setComponent(ComponentName)或者setClass(Context,Class)来指定)。通过指定具体的组件类,通知应用启动对应的组件。间接Intent:没有指定comonent属性的Intent。这些Intent需要包含足够的信息,这样系统才能根据这些信息,在所有的可用组件中,确定满足此Intent的组件。,Intent解析,对于直接Intent,Android不需要去做解析,因为目标组件已经很明确,Android需要解析的是那些间接Intent,通过解析,将Intent映射给可以处理此Intent的Activity、IntentReceiver或Service。Intent解析机制主要是通过查找已注册在AndroidManifest.xml中的所有IntentFilter及其中定义的Intent,最终找到匹配的Intent。在这个解析过程中,Android是通过Intent的action、type、category这三个属性来进行判断的,判断方法如下:如果Intent指明定了action,则目标组件的IntentFilter的action列表中就必须包含有这个action,否则不能匹配;如果Intent没有提供type,系统将从data中得到数据类型。和action一样,目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配。如果Intent中的数据不是content:类型的URI,而且Intent也没有明确指定它的type,将根据Intent中数据的scheme(比如http:或者mailto:)进行匹配。同上,Intent的scheme必须出现在目标组件的scheme列表中。如果Intent指定了一个或多个category,这些类别必须全部出现在组建的类别列表中。比如Intent中包含了两个类别:LAUNCHER_CATEGORY和ALTERNATIVE_CATEGORY,解析得到的目标组件必须至少包含这两个类别。,Intent的匹配,对于明确指出了目标组件名称的Intent,我们称之为“显式Intent”。对于没有明确指出目标组件名称的Intent,则称之为“隐式Intent”。Android系统使用IntentFilter来寻找与隐Intent相关的对象。显式Intent直接用组件的名称定义目标组件,这种方式很直接。但是由于开发人员往往并不清楚别的应用程序的组件名称,因此,显式Intent更多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。隐式Intent恰恰相反,它不会用组件名称定义需要激活的目标组件,它更广泛地用于在不同应用程序之间传递消息。,显式intent,publicvoidonClick(Viewv)Intentintent=newIntent();intent.putExtra(string,获得了Activity01的数据);intent.setClass(this,Activity02.class);this.startActivity(intent);代码简洁明了,执行了onClick()函数,就会马上跳转到名为Activity02的Activity中,并将参数带入到Activity中。,隐式intent,在显式Intent消息中,决定目标组件的唯一要素就是组件名称,因此,如果你的Intent中已经明确定义了目标组件的名称,那么你就完全不用再定义其他Intent内容。而对于隐式Intent则不同,由于没有明确的目标组件名称,所以必须由Android系统帮助应用程序寻找与Intent请求意图最匹配的组件。具体的选择方法是:Android将Intent的请求内容和一个叫做IntentFilter的过滤器比较,IntentFilter中包含系统中所有可能的待选组件。如果IntentFilter中某一组件匹配隐式Intent请求的内容,那么Android就选择该组件作为该隐式Intent的目标组件。,隐式intent例子,publicvoidonClick(Viewv)Uriuri=Uri.parse(smsto:0800000123);Intentintent=newIntent(Intent.ACTION_SENDTO,uri);intent.putExtra(sms_body,thesmstext);startActivity(intent);执行onClick()方法,会执行进入到系统自带的发短信窗口。,附录,用Intent调用系统中经常被用到的组件1,web浏览器Uriuri=Uri.parse();returnIt=newIntent(Intent.ACTION_VIEW,uri);2,地图UrimapUri=Uri.parse(geo:38.899533,-77.036476);returnIt=newIntent(Intent.ACTION_VIEW,mapUri);3,调拨打电话界面UritelUri=Uri.parse(tel:100861);returnIt=newIntent(Intent.ACTION_DIAL,telUri);4,直接拨打电话UricallUri=Uri.parse(tel:100861);returnIt=newIntent(Intent.ACTION_CALL,callUri);,5,卸载UriuninstallUri=Uri.fromParts(package,xxx,null);returnIt=newIntent(Intent.ACTION_DELETE,uninstallUri);6,安装UriinstallUri=Uri.fromParts(package,xxx,null);returnIt=newIntent(Intent.ACTION_PACKAGE_ADDED,installUri);7,播放UriplayUri=Uri.parse(file:/sdcard/download/everything.mp3);returnIt=newIntent(Intent.ACTION_VIEW,playUri);8,调用发邮件UriemailUri=Uri.parse(mailto:test);returnIt=newIntent(Intent.ACTION_SENDTO,emailUri);9,发邮件returnIt=newIntent(Intent.ACTION_SEND);Stringtos=“test1;Stringccs=“test2;returnIt.putExtra(Intent.EXTRA_EMAIL,tos);returnIt.putExtra(Intent.EXTRA_CC,ccs);returnIt.putExtra(Intent.EXTRA_TEXT,body);returnIt.putExtra(Intent.EXTRA_SUBJECT,subject);returnIt.setType(message/rfc882);Intent.createChooser(returnIt,ChooseEmailClient);,10,发短信UrismsUri=Uri.parse(tel:100861);returnIt=newIntent(Intent.ACTION_VIEW,smsUri);returnIt.putExtra(sms_body,shenrenkui);returnIt.setType(vnd.android-dir/mms-sms);11,直接发邮件UrismsToUri=Uri.parse(smsto:/100861);returnIt=newIntent(Intent.ACTION_SENDTO,smsToUri);returnIt.putExtra(sms_body,“test);12,发彩信UrimmsUri=Uri.pa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论