1、显式Intent(explicit intent)

显式Intent明确指定了要启动的activity:

  Intent intent= new Intent(this, Target.class)

2、隐式Intent(implicit intent)

隐式Intent没有明确指定要启动的activity ,而是通过设置一些Intent Filter来让系统去筛选合适的activity来启动。Intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data:
在startActivity()时,android会默认加上一个CATEGORY_DEFAULT,这样一来如果intent filter中没有android.intent.category.DEFAULT这个category的话,匹配就会失败,你的程序一定会崩溃!所以,如果你的activity支持接收隐式Intent的话就一定要在intent filter中加入以下这个category:

<category android:name="android.intent.category.DEFAULT"/>

如果组件不声明intent-filter,那么所有的隐式Intent事件都不会发送给该组件。

3、data由URI来描述和定位,URI由三部分组成,

scheme://host:port/path      模式://主机:端口/路径
<data android:mimeType=""
android:scheme=""
android:host=""
android:port=""
android:path=""
android:pathPrefix=""
android:pathPattern=""/>

上面<data…/>元素支持如下属性:

mimeType:用于声明该组件所能匹配的Intent的Type属性。
scheme:用于声明该组件所能匹配的Intent的Data属性的scheme部分。
host:用于声明该组件所能匹配的Intent的Data属性的host部分。
port:用于声明该组件所能匹配的Intent的Data属性的port部分。
path:用于声明该组件所能匹配的Intentde Data属性的path部分。
pathPrefix:用于声明该组件所能匹配的Intent的Data属性的path前缀。
pathPattern:用于声明该组件所能匹配的Intent的的Data属性的path字符串模板。
Intent的Type属性也用于指定该Intent的要求,必须对应组件中<intent-filter…/>元素中<data…/>子元素的mineType属性与此相同,才能启动该组件。

例子:

如果我们的manifest.xml是这样的:

<manifest>
...<application>...<activityandroid:name=".LoginActivity"android:label="@string/title_activity_login"><intent-filter><action android:name="com.wong.mytesta.W" /><category android:name="android.intent.category.DEFAULT" /><dataandroid:host="com.wong.www"android:mimeType="text/haha"android:path="/mytest"android:port="1000"android:scheme="wong"/></intent-filter></activity><activityandroid:name=".NavigationActivity"android:label="@string/title_activity_navigation"android:theme="@style/AppTheme.NoActionBar"><intent-filter><action android:name="com.wong.mytesta.WWW" /><category android:name="com.wong.MyCategory" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity><activityandroid:name=".TabActivity"android:label="@string/title_activity_tab"android:theme="@style/AppTheme.NoActionBar"><intent-filter><action android:name="com.wong.mytesta.WWW" /><category android:name="com.wong.MyCategory" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity><activityandroid:name=".SettingsActivity"android:label="@string/title_activity_settings"><intent-filter><action android:name="com.wong.mytesta.WWWB" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>...</application></manifest>

我们用隐式来启动SettingsActivity:

Intent intent = new Intent();
intent.setAction("com.wong.mytesta.WWWB");
startActivity(intent);

如果我们用com.wong.mytesta.WWW启动activity,就会弹出两个activity让我们选择,因为根据intent filter的匹配规则,有两个activity符合,即TabActivity和NavigationActivity:

Intent intent = new Intent();
intent.setAction("com.wong.mytesta.WWW");
startActivity(intent);

使用data来启动activity:

Intent intent = new Intent();
intent.setDataAndType(Uri.parse("wong://com.wong.www:1000/mytest"),"text/haha");
startActivity(intent);

例外情况:

<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

以上的intent filter中没有必要加入android.intent.category.DEFAULT,当然加入也没有问题。

参考代码

显式Intent与隐式Intent相关推荐

  1. 显示Intent和隐式Intent

    转载自:https://www.cnblogs.com/liaojie970/p/5827433.html Intent是Android初学者比较难理解的一个东西.我这里以通俗易懂的语言和通俗易懂的代 ...

  2. Android Intent常用方法详细介绍,显示Intent,隐式Intent,调用浏览器,拨号,发短信,传递数据

    Intent介绍 Intent是Android程序中各个组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据.Intent一般用于启动活动,启动服务以及发 ...

  3. Android显式意图和隐式意图

    intent基本理解 我们都知道Android四大组件:Activity .Service.broadcast receiver 及 内容提供者. 其中,Activity .Service.broad ...

  4. Andriod 显式启动、隐式启动练习简析

    activity_main.xml代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayou ...

  5. 33 个 JavaScript 核心概念系列(三): 显式 (名义) 与 隐式 (鸭子)类型转换

    原文地址:落明的博客 一. 前言 说实话,JavaScript 的类型转换是个相当头疼的问题,无论是对于初学者还是有经验的老司机.它的难处并不在于概念多难理解,而是情况多且杂,看似相同的情况结果却又出 ...

  6. C#的显式接口和隐式接口

    C#的显式接口和隐式接口 接口的实现分为:隐式实现和显式实现.如果类或者结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口那么接口中相同名称成员就要显式实现.显示实现是通过使用接口 ...

  7. JavaScript高级day02-AM【函数的prototype、显式原型与隐式原型、原型链】

    笔记.视频.源码:JavaScript(基础.高级)笔记汇总表[尚硅谷JavaScript全套教程完整版] 目   录 P15 15.尚硅谷_JS高级_函数的prototype 15:04 1. 函数 ...

  8. 三种等待方式:强制等待、显式等待、隐式等待

    我们在使用selenium的时候,会遇到一种定位不到的情况,因为web页面有一个加载的过程 当页面元素未出现时,去定位肯定是定位不到的,所以我们需要用到了'等待',该如何使用等待呢,让我们一起来探讨一 ...

  9. 【selenium-python】显式等待和隐式等待的使用和区别

    我的博客 网上教程挺多,看完还是没太理解,看了官方文档稍微理解了一些,在此记录. 部分观点为个人理解,请批判性阅读.如有错误,请指正,万分感谢. 参考: webdriver_waits When to ...

最新文章

  1. eclipse运行 Maven Test命令时控制台输出乱码的解决办法
  2. php把中文写入mysql_PHP向mysql插入中文乱码问题,php文件内容写入数据库!
  3. token,session,cookie
  4. 全球与中国聚硫聚合物市场运行规模分析及前景趋势预测报2021年版
  5. 第二阶段scrum-3
  6. C和C++之用extern “C“实现它们之间的互调
  7. python 多次读取文件的细节
  8. 计算机网络的一大发展趋势是多维化,对口高考计算机网络概述复习.ppt
  9. 原生ajax、XMLHttpRequest和FetchAPI简单描述
  10. 第31讲 聊天室程序
  11. Workstation服务无法启动导致无法访问文件服务器
  12. 解决mac系统压缩文件.zip,在win解压后,出现乱码
  13. 7-3 前序序列创建二叉树 (25 分) PTA
  14. 微信小程序页面跳转,url传参参数丢失问题
  15. 20135306-信息安全系统设计基础第一周学习总结
  16. 阿里算法工程师在线编程题
  17. 母函数 By Tanky Woo
  18. 新美大和阿里本地生活的竞争趋势是如何的?
  19. 滨州稻田绽放人生 国稻种芯·中国水稻节:山东盐碱地变良田
  20. 看见、读懂、放大,这个运营套路有点意思

热门文章

  1. js 相对路径转为绝对路径
  2. apple watch更新系统时出现红色感叹号怎么办?
  3. 【理财入门一】三大资产与财务自由
  4. timeout参数使用,转贴
  5. 数据封包解包协议之TCP封包解包
  6. 基于linux网络流量监控与分析软件的设计与实现shell,Shell图形化监控网络流量
  7. 【Matlab瑕疵检测】阙值瓶盖瑕疵检测【含源码 730期】
  8. 高端加密IC开发常见问题
  9. springBoot启动失败Caused by: java.lang.ClassNotFoundException: org.springframework.http.MediaType
  10. oracle11g登录企业管理器,Oracle11g RAC常用操作 (维护及管理)