显示意图

简而言之:

通过指定特定Activity的包名和类名开启Activity

应用场景:

一般应用于本App内的activity间的跳转。

XML配置信息:

AndroidManifest.xml

  1. <!--显示意图:举例-->
  2. <activity
  3. android:name=".activity.intent.IntentOneActivity"
  4. android:launchMode="singleTop"
  5. android:screenOrientation="portrait"
  6. android:windowSoftInputMode="adjustPan" />

开启方式:

  1. //显示意图激活的四种可用方式
  2. private void jumpOne() {
  3. //方式一:快捷方式(推荐,常用)
  4. Intent intent = new Intent(this, IntentTwoActivity.class);
  5. // //方式二:面向组件
  6. // Intent intent = new Intent();
  7. // ComponentName cn = new ComponentName(this, IntentTwoActivity.class);
  8. // intent.setComponent(cn);
  9. // //方式三:设置Class方式
  10. // Intent intent = new Intent();
  11. // intent.setClass(this, IntentTwoActivity.class);
  12. // //方式四:设置ClassName方式(有两种参数方式;传入全类名(完整包名+类名))
  13. // Intent intent = new Intent();
  14. // //intent.setClassName(this, "包名.activity.intent.IntentOneActivity");
  15. // intent.setClassName("包名", "包名.activity.intent.IntentOneActivity");
  16. startActivity(intent);
  17. }


隐式意图

简而言之:

通过指定一组动作或数据开启一个Activity

应用场景:

  1. 开启系统应用的某个界面(如:打电话、发短信、浏览器等)
  2. 开启某个应用的某个界面(需要对方应用提供其隐式配置信息)
  3. 也可以用于自身应用界面的跳转(显示意图更方便)

隐式意图配置和使用有多种情况


1️⃣配置与使用方式 一

  • AndroidManifest.xml
  1. <!--隐式意图的配置声明 -->
  2. <activity android:name=".activity.intent.IntentTwoActivity">
  3. <!--配置1:只配置了action和category-->
  4. <intent-filter>
  5. <!-- 默认的一种规范:全类名(包名+类名) -->
  6. <action android:name="包名.activity.intent.IntentTwoActivity" />
  7. <!--默认的一个category(必不可少)-->
  8. <category android:name="android.intent.category.DEFAULT" />
  9. </intent-filter>
  10. <!--配置2:mimeType-->
  11. <intent-filter>
  12. <action android:name="包名.myName" />
  13. <category android:name="android.intent.category.DEFAULT" />
  14. <category android:name="android.intent.category.AA" />
  15. <data android:mimeType="ab/cd3" />
  16. </intent-filter>
  17. <!--配置3:只有scheme有值-->
  18. <intent-filter>
  19. <action android:name="xx.xxx.xxx.xxx" />
  20. <category android:name="android.intent.category.DEFAULT" />
  21. <category android:name="android.intent.category.aa" />
  22. <data android:scheme="abc" />
  23. </intent-filter>
  24. <!--配置4:mimeType和scheme 有值-->
  25. <intent-filter>
  26. <action android:name="wo.shi.yi.ge.action" />
  27. <category android:name="android.intent.category.DEFAULT" />
  28. <category android:name="xx.xxx.aa.bb" />
  29. <data
  30. android:mimeType="a/b"
  31. android:scheme="home" />
  32. </intent-filter>
  33. </activity>
  • 自身应用内使用隐式意图激活
    • 匹配:(上述)配置1
  1. Intent intent = new Intent(); //创建意图对象
  2. //为意图设置 action(动作)
  3. intent.setAction("包名.activity.intent.IntentTwoActivity");
  4. //为意图添加 category(类别)
  5. //category可以省略不加,intent 会默认为:"android.intent.category.DEFAULT"
  6. //intent.addCategory("android.intent.category.DEFAULT");
  7. startActivity(intent);
    • 匹配:(上述)配置2
  1. Intent intent = new Intent();
  2. intent.setAction("包名.myName");
  3. intent.addCategory("android.intent.category.AA");
  4. intent.setType("ab/cd3");
  5. startActivity(intent);
    • 匹配:(上述)配置3
  1. Intent intent = new Intent();
  2. intent.setAction("xx.xxx.xxx.xxx");
  3. intent.addCategory("android.intent.category.aa");
  4. intent.setData(Uri.parse("abc:"));
  5. startActivity(intent);
    • 匹配:(上述)配置4
  1. Intent intent = new Intent();
  2. intent.setAction("wo.shi.yi.ge.action");
  3. intent.addCategory("xx.xxx.aa.bb");
  4. intent.setDataAndType(Uri.parse("home:"), "a/b");
  5. startActivity(intent);

2️⃣配置与使用方式 二

  • AndroidManifest.xml

    intent-filter 多匹配规则:当有多个 action,多个category,多个data,只需要匹配一组即可!
  1. <!--隐式意图的配置声明 -->
  2. <activity android:name=".activity.intent.IntentTwoActivity">
  3. <intent-filter>
  4. <!-- action name:内容可以任意定义 -->
  5. <action android:name="包名.activity.intent.IntentTwoActivity" />
  6. <action android:name="包名.myName" />
  7. <action android:name="xx.xxx.xxx.xxx" />
  8. <action android:name="wo.shi.yi.ge.action" />
  9. <!--默认的一个category(必不可少),还可以自定义其他的-->
  10. <category android:name="android.intent.category.DEFAULT" />
  11. <category android:name="android.intent.category.AA" />
  12. <category android:name="android.intent.category.aa" />
  13. <category android:name="xx.xxx.aa.bb" />
  14. <!--定义意图的:约束和数据-->
  15. <data android:mimeType="ab/cd3" />
  16. <data android:scheme="abc" />
  17. <data
  18. android:mimeType="a/b"
  19. android:scheme="home" />
  20. </intent-filter>
  21. </activity>
  • 自身应用内使用隐式意图激活
    • 匹配:(上述)配置

      注意: 若的配置数据里面,有的匹配规则只配置了:mimeType,有的只配置了:scheme,有的配置了:mimeType和scheme,那么在激活设置的时候必须使用:setDataAndType()方法,参数内可以匹配任意的:scheme和mimeType的数据!
  1. Intent intent = new Intent();
  2. intent.setAction("wo.shi.yi.ge.action");
  3. intent.addCategory("xx.xxx.aa.bb");
  4. intent.setDataAndType(Uri.parse("abc:"), "ab/cd3");
  5. startActivity(intent);

两个应用之间如何激活?

以上述:配置与使用方式 二 为匹配规则,在其他应用内激活本应用的指定的某个activity(此处以:IntentTwoActivity 为例)

::使用 kotlin 代码来实践说明

代码如示:

  1. //action 和 addCategory 匹配配置里面的任意一个就可以
  2. //addCategory可以不传值,intent会默认传递:android.intent.category.DEFAULT
  3. val intent = Intent()
  4. intent.action = "包名.activity.intent.IntentTwoActivity"
  5. intent.`package` = "包名"
  6. intent.addCategory("android.intent.category.AA")
  7. //错误
  8. //intent.data = Uri.parse("home:")
  9. //intent.type = "ab/cd3"
  10. //正确
  11. intent.setDataAndType(Uri.parse("home:"), "ab/cd3")
  12. startActivity(intent)

隐式意图使用特别注意点:

  1. setType()和setData不能同时存在,两个方法会相互清空对方的设置。若同时使用,会抛出异常!若需要同时设置类型和数据,可以使用setDataAndType()方法!
  1. 若AndroidManifest中意图配置中只配置了:android:mimeType,那么只能且必须使用setType()方法,不能使用setDataAndType()方法!
  1. 若AndroidManifest中意图配置中只配置了:android:scheme,那么只能且必须使用setData()方法,不能使用setDataAndType()方法!
  1. 若AndroidManifest中意图配置中配置了:android:mimeType和android:scheme,那么只能且必须使用setDataAndType()方法!

注意一个坑: 下面的两个方法,参数里面的 ' : ' (就是这个冒号)千万!千万!不要忘记了~ (你懂的,说多了都是泪,我之前就是没注意,然后Debug了好久,让我记忆深刻啊!)

setData(Uri.parse("xx:"))

setDataAndType(Uri.parse("xx:"), "xx/xx")

intent-filter多种匹配规则:需要注意如下

  • 多匹配规则 配置在同一个...内

    • 如(上述):配置与使用方式 二,该情况下必须使用setDataAndType()方法设置数据,不能省略!
  • 多匹配规则 配置在不同的...内

    • 如(上述):配置与使用方式 一,配置数据里有多种匹配规则,有的配置了mimeType,有的配置了scheme,有的配置了mimeType和scheme,还有的mimeType和scheme都没有配置;那么,在激活的时候,就可以根据需求使用不同的方式去激活。

Android的显示意图和隐式意图总结的更多相关文章

  1. Android 显示意图和隐式意图的区别

    意图在android的应用开发中是很重要的,明白了意图的作用和使用后,对开发会有很大帮助.如果没有把意图搞懂,以后开发应用会感觉缺些什么.        意图的作用:        1.激活组件   ...

  2. Android学习记录(7)—Intent中显示意图和隐式意图的用法

    Intent(意图)主要是解决Android应用的各项组件之间的通讯. Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的 ...

  3. 基础学习总结(八)--Intent中显示意图和隐式意图的用法

    Intent(意图)主要是解决Android应用的各项组件之间的通讯.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组 ...

  4. Android中显式意图和隐式意图的区别

    1.显式意图 可以直接通过名称开启指定的目标组件: 通过构造方法Intent(Context packageContext,class<?>cls)来实现. button_1 = (But ...

  5. Activity组件:(一)通过显式意图和隐式意图来实现Activity间的跳转

    一.通过显式意图来实现Activity间的跳转 显式意图是指在创建Intent对象时就指定接受者组件 /** * 下面是通过显式意图进行跳转,即明确写出要跳转到SecondActivity.class ...

  6. Activity组件(二):通过显式意图和隐式意图来跳转至第三方应用

    一.显式意图来跳转到第三方应用 /** * 这个方法会在点击按钮的时候执行 * @param view */ public void skip2Browser(View view){ Log.d(TA ...

  7. android intent 隐式意图和显示意图(activity跳转)

    android中的意图有显示意图和隐式意图两种, 显示意图要求必须知道被激活组件的包和class 隐式意图只需要知道跳转activity的动作和数据,就可以激活对应的组件 A 主activity  B ...

  8. Android学习笔记_17_Intent匹配规则(隐式意图)

    Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行 ...

  9. 隐式意图Intent

    在我们想往下一个页面传递数据时,要想到显式意图和隐式意图,显示意图用于内部活动跳转时比较方便,而隐式意图用于应用程序中外部活动的跳转时较为方便,在使用隐式意图时我们要想到清单文件 代码如下: < ...

随机推荐

  1. 写论文的第二天 Hbase集群搭建

    日志______2019.1.24 Hbase分布式搭建 注意:hbase的使用基于hadoop,开启以及关闭需要注意顺序,由于我是的是自带的zookeeper,说以开启关闭顺序应如下 启动:hado ...

  2. 纯数据结构Java实现(5/11)(Set&Map)

    纯数据结构Java实现(5/11)(Set&Map) Set 和 Map 都是抽象或者高级数据结构,至于底层是采用树还是散列则根据需要而定. 可以细想一下 TreeMap/HashMap, T ...

  3. Python学习 之 计算机基础

    第一章 计算机基础 1.1 硬件 计算机基本的硬件由:CPU / 内存 / 主板 / 硬盘 / 网卡 / 显卡 等组成,只有硬件但硬件之间无法进行交流和通信 1.2 操作系统 操作系统用于协同或控制硬 ...

  4. 微信小程序 es6-promise.js封装请求 处理异步进程

    下载es6-promise.js置于根目录下的libs文件夹下: 在根目录utils文件夹下新建httpsPromisify.js,即定义封装请求的方法 var Promise = require(' ...

  5. HTML连载33-背景定位

    一.背景定位 同一个标签可以同时设置背景颜色和背景图片,如果颜色和图片同时存在,那么图片会覆盖颜色 1.在CSS中有一个叫做background-position:属性,就是专门用来控制背景图片的位置 ...

  6. java日志框架笔记-log4j-springboot整合

    # 日志框架slf4j log4j logback之间的关系 简答的讲就是slf4j是一系列的日志接口,而log4j logback是具体实现了的日志框架. ```java SLF4J获得logger ...

  7. Java多线程之线程协作

    Java多线程之线程协作 一.前言 上一节提到,如果有一个线程正在运行synchronized 方法,那么其他线程就无法再运行这个方法了.这就是简单的互斥处理. 假如我们现在想执行更加精确的控制,而不 ...

  8. MSIL实用指南-方法的调用

    方法调用指令主要有Call和Callvirt. 调用static或sealed修饰的方法,用Call指令. 调用virtual或abstract修饰的方法,用Callvirt指令. 代码实例: ilG ...

  9. Codeforces 964C Alternating Sum

    Alternating Sum 题意很简单 就是对一个数列求和. 题解:如果不考虑符号 每一项都是前一项的 (b/a)倍, 然后考虑到符号的话, 符号k次一循环, 那么 下一个同一符号的位置 就是 这 ...

  10. 杭电多校第二场 hdu 6315 Naive Operations 线段树变形

    Naive Operations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 502768/502768 K (Java/Other ...