尚学堂Android培训Intent对象与Intent Filter过滤匹配过程详解.docVIP

尚学堂Android培训Intent对象与Intent Filter过滤匹配过程详解.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
尚学堂Android培训Intent对象与Intent Filter过滤匹配过程详解

北京尚学堂提供 我们知道,Intent是分两种的:显式Intent和隐式Intent。如果一个Intent明确指定了要启动的组件的完整类名,那么这个Intent就是显式Intent,否则就是隐式Intent。当我们用一个显式Intent去启动组件时,Android会根据Intent对象所提供的component name直接找到要启动的组件,当我们用一个隐式的Intent去启动组件时,Android系统就无法直接知道要启动的组件名称了,本文就是讲解Android系统如何根据隐式Intent查找匹配到要启动的组件。 当Android系统接收到一个隐式Intent要启动一个Activity(或其他组件)时,Android会根据以下三个信息比较Intent的信息与注册的组件的intent-filter的信息,从而为该Intent选择出最匹配的Activity(或其他组件): intent中的action intent中的category intent中的data(包含Uri以及data的MIME类型) 也就是隐式intent对象要满足要启动的目标组件中注册的intent-filter中的action /、category /、data /三个标签中的信息,即要分别通过action测试、category测试以及data测试。intent-filter信息是在Android的manife文件中描述的,顾名思义,intent-filter是intent过滤器,就是用来过滤intent的。 如果隐式intent对象同时通过了某个组件的中intent-filter的action测试、category测试以及data测试,那么该组件就可以被intent对象所启动。如果隐式intent对象没有通过系统中任何组件的intent-filter测试,那么就没有Android系统无法找到该intent对象要启动的组件。下面我们依次看一下如何才能通过这三个测试。Action测试 为了指定能够接收并处理的Intent的类型,组件可以在intent-filter中声明其支持0个或多个action,例如: intent-filter action android:name=com.ispring.action.ACTION_TEST1 / action android:name=com.ispring.action.ACTION_TEST2 / category android:name=ent.category.DEFAULT / /intent-filter intent对象可以通过setAction()方法设置唯一的一个action值。对于action测试,需要分两种情况: intent对象设置了action? 如果intent对象通过调用setAction()方法设置了action的值,那么只有当组件的intent-filter中包含了intent对象中的action值的时候,action测试才通过,否则无法通过。? 举个例子,假设我们的Activity的intent-filter如下所示: intent-filter action android:name=com.ispring.action.ACTION_TEST1 / action android:name=com.ispring.action.ACTION_TEST2 / category android:name=ent.category.DEFAULT / data android:scheme=ispring android:host= / /intent-filter 下面的intent对象可以通过上面intent-filter里面的action测试: Intent intent = new Intent(); intent.setAction(com.ispring.action.ACTION_TEST1); Uri uri = Uri.parse(ispring:///sunqunsunqun); intent.setData(uri); 该intent之所以能通过action测试是因为intent-filter中包含该intent的action值com.ispring.action.ACTION_TEST1。 下面的intent对象无法通过上面intent-filter里面的action测试: Intent intent = new Intent(); intent.setAction(com.ispring.action.ACTION_TEST3); Uri uri = Uri.parse(ispring:///sunqunsunq

文档评论(0)

cj80011 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档