Android的显示意图和隐式意图总结
显示意图
简而言之:
通过指定特定Activity的包名和类名开启Activity
应用场景:
一般应用于本App内的activity间的跳转。
XML配置信息:
AndroidManifest.xml
<!--显示意图:举例-->
<activity
android:name=".activity.intent.IntentOneActivity"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustPan" />
开启方式:
//显示意图激活的四种可用方式
private void jumpOne() {
//方式一:快捷方式(推荐,常用)
Intent intent = new Intent(this, IntentTwoActivity.class);
// //方式二:面向组件
// Intent intent = new Intent();
// ComponentName cn = new ComponentName(this, IntentTwoActivity.class);
// intent.setComponent(cn);
// //方式三:设置Class方式
// Intent intent = new Intent();
// intent.setClass(this, IntentTwoActivity.class);
// //方式四:设置ClassName方式(有两种参数方式;传入全类名(完整包名+类名))
// Intent intent = new Intent();
// //intent.setClassName(this, "包名.activity.intent.IntentOneActivity");
// intent.setClassName("包名", "包名.activity.intent.IntentOneActivity");
startActivity(intent);
}
隐式意图
简而言之:
通过指定一组动作或数据开启一个Activity
应用场景:
- 开启系统应用的某个界面(如:打电话、发短信、浏览器等)
- 开启某个应用的某个界面(需要对方应用提供其隐式配置信息)
- 也可以用于自身应用界面的跳转(显示意图更方便)
隐式意图配置和使用有多种情况
1️⃣配置与使用方式 一
- AndroidManifest.xml
<!--隐式意图的配置声明 -->
<activity android:name=".activity.intent.IntentTwoActivity">
<!--配置1:只配置了action和category-->
<intent-filter>
<!-- 默认的一种规范:全类名(包名+类名) -->
<action android:name="包名.activity.intent.IntentTwoActivity" />
<!--默认的一个category(必不可少)-->
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<!--配置2:mimeType-->
<intent-filter>
<action android:name="包名.myName" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.AA" />
<data android:mimeType="ab/cd3" />
</intent-filter>
<!--配置3:只有scheme有值-->
<intent-filter>
<action android:name="xx.xxx.xxx.xxx" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.aa" />
<data android:scheme="abc" />
</intent-filter>
<!--配置4:mimeType和scheme 有值-->
<intent-filter>
<action android:name="wo.shi.yi.ge.action" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="xx.xxx.aa.bb" />
<data
android:mimeType="a/b"
android:scheme="home" />
</intent-filter>
</activity>
- 自身应用内使用隐式意图激活
- 匹配:(上述)配置1
Intent intent = new Intent(); //创建意图对象
//为意图设置 action(动作)
intent.setAction("包名.activity.intent.IntentTwoActivity");
//为意图添加 category(类别)
//category可以省略不加,intent 会默认为:"android.intent.category.DEFAULT"
//intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
- 匹配:(上述)配置2
Intent intent = new Intent();
intent.setAction("包名.myName");
intent.addCategory("android.intent.category.AA");
intent.setType("ab/cd3");
startActivity(intent);
- 匹配:(上述)配置3
Intent intent = new Intent();
intent.setAction("xx.xxx.xxx.xxx");
intent.addCategory("android.intent.category.aa");
intent.setData(Uri.parse("abc:"));
startActivity(intent);
- 匹配:(上述)配置4
Intent intent = new Intent();
intent.setAction("wo.shi.yi.ge.action");
intent.addCategory("xx.xxx.aa.bb");
intent.setDataAndType(Uri.parse("home:"), "a/b");
startActivity(intent);
2️⃣配置与使用方式 二
- AndroidManifest.xml
intent-filter 多匹配规则:当有多个 action,多个category,多个data,只需要匹配一组即可!
<!--隐式意图的配置声明 -->
<activity android:name=".activity.intent.IntentTwoActivity">
<intent-filter>
<!-- action name:内容可以任意定义 -->
<action android:name="包名.activity.intent.IntentTwoActivity" />
<action android:name="包名.myName" />
<action android:name="xx.xxx.xxx.xxx" />
<action android:name="wo.shi.yi.ge.action" />
<!--默认的一个category(必不可少),还可以自定义其他的-->
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.AA" />
<category android:name="android.intent.category.aa" />
<category android:name="xx.xxx.aa.bb" />
<!--定义意图的:约束和数据-->
<data android:mimeType="ab/cd3" />
<data android:scheme="abc" />
<data
android:mimeType="a/b"
android:scheme="home" />
</intent-filter>
</activity>
- 自身应用内使用隐式意图激活
- 匹配:(上述)配置
注意: 若的配置数据里面,有的匹配规则只配置了:mimeType,有的只配置了:scheme,有的配置了:mimeType和scheme,那么在激活设置的时候必须使用:setDataAndType()方法,参数内可以匹配任意的:scheme和mimeType的数据!
- 匹配:(上述)配置
Intent intent = new Intent();
intent.setAction("wo.shi.yi.ge.action");
intent.addCategory("xx.xxx.aa.bb");
intent.setDataAndType(Uri.parse("abc:"), "ab/cd3");
startActivity(intent);
两个应用之间如何激活?
以上述:配置与使用方式 二 为匹配规则,在其他应用内激活本应用的指定的某个activity(此处以:IntentTwoActivity 为例)
::使用 kotlin 代码来实践说明
代码如示:
//action 和 addCategory 匹配配置里面的任意一个就可以
//addCategory可以不传值,intent会默认传递:android.intent.category.DEFAULT
val intent = Intent()
intent.action = "包名.activity.intent.IntentTwoActivity"
intent.`package` = "包名"
intent.addCategory("android.intent.category.AA")
//错误
//intent.data = Uri.parse("home:")
//intent.type = "ab/cd3"
//正确
intent.setDataAndType(Uri.parse("home:"), "ab/cd3")
startActivity(intent)
隐式意图使用特别注意点:
- setType()和setData不能同时存在,两个方法会相互清空对方的设置。若同时使用,会抛出异常!若需要同时设置类型和数据,可以使用setDataAndType()方法!
- 若AndroidManifest中意图配置中只配置了:android:mimeType,那么只能且必须使用setType()方法,不能使用setDataAndType()方法!
- 若AndroidManifest中意图配置中只配置了:android:scheme,那么只能且必须使用setData()方法,不能使用setDataAndType()方法!
- 若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的显示意图和隐式意图总结的更多相关文章
- Android 显示意图和隐式意图的区别
意图在android的应用开发中是很重要的,明白了意图的作用和使用后,对开发会有很大帮助.如果没有把意图搞懂,以后开发应用会感觉缺些什么. 意图的作用: 1.激活组件 ...
- Android学习记录(7)—Intent中显示意图和隐式意图的用法
Intent(意图)主要是解决Android应用的各项组件之间的通讯. Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的 ...
- 基础学习总结(八)--Intent中显示意图和隐式意图的用法
Intent(意图)主要是解决Android应用的各项组件之间的通讯.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组 ...
- Android中显式意图和隐式意图的区别
1.显式意图 可以直接通过名称开启指定的目标组件: 通过构造方法Intent(Context packageContext,class<?>cls)来实现. button_1 = (But ...
- Activity组件:(一)通过显式意图和隐式意图来实现Activity间的跳转
一.通过显式意图来实现Activity间的跳转 显式意图是指在创建Intent对象时就指定接受者组件 /** * 下面是通过显式意图进行跳转,即明确写出要跳转到SecondActivity.class ...
- Activity组件(二):通过显式意图和隐式意图来跳转至第三方应用
一.显式意图来跳转到第三方应用 /** * 这个方法会在点击按钮的时候执行 * @param view */ public void skip2Browser(View view){ Log.d(TA ...
- android intent 隐式意图和显示意图(activity跳转)
android中的意图有显示意图和隐式意图两种, 显示意图要求必须知道被激活组件的包和class 隐式意图只需要知道跳转activity的动作和数据,就可以激活对应的组件 A 主activity B ...
- Android学习笔记_17_Intent匹配规则(隐式意图)
Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行 ...
- 隐式意图Intent
在我们想往下一个页面传递数据时,要想到显式意图和隐式意图,显示意图用于内部活动跳转时比较方便,而隐式意图用于应用程序中外部活动的跳转时较为方便,在使用隐式意图时我们要想到清单文件 代码如下: < ...
随机推荐
- .net测试篇之测试神器Autofixture基本配置一
系列目录 实际工作中我们需要的数据逻辑万千,千变万化,而AutoFixture默认是按照一定算法随机生成一些假数据,虽然这在多数时候是ok的,但是可能不能满足我们的所有业务场景,有些时候我们需要进行一 ...
- 因为配置了Always-On导致的无法Drop Login...
一个sysadmin离职了,但是因为之前是他配置的Always-on,所以试图Drop他的login就会失败,原因是这个login会赋予一个叫做“Hadr_endpoint”的endpoint权限,并 ...
- springboot + jedisCluster
如果使用的是redis2.x,在项目中使用客户端分片(Shard)机制. 如果使用的是redis3.x中的集群,在项目中使用jedisCluster. 1.项目结构 2.pom.xml 1 <? ...
- pyhton介绍、发展趋势、安装
pyhton介绍.发展趋势.安装 一.python起源 pyhton的创始人为吉多·范罗苏姆(Gudio van Rossum) (后文简称龟叔) 1. 1989年的圣诞节期间,龟叔为了在阿姆 ...
- 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(1)
材料说明: 文档<NVM-Express-1_4-2019.06.10-Ratified.pdf>来自于NVMe网站:https://nvmexpress.org/ 笔记目的是学习NVMe ...
- c#滑窗缓存
前言 在大数据时代,软件系统需要具备处理海量数据的能力,同时也更加依赖于系统强大的存储能力与数据响应能力.各种大数据的工具如雨后春笋般孕育而生,这对于系统来说是极大的利好.但在后端采用分布式.云存储和 ...
- Docker学习总结(三)--常用命令
镜像相关命令 查看镜像 docker images 返回列表字段含义如下: 字段名称 字段含义 REPOSITORY 镜像名称 TAG 镜像标签 IMAGE ID 镜像 ID CREATED 镜像创建 ...
- JSP指令、标签以及中文乱码
JSP指令.标签以及中文乱码 一.JSP指令简介 JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. JSP指令的基本 ...
- Python之函数(一)定义函数以及传参
定义函数以及传参 函数的定义 def 函数名(): 函数体 例子: def func():#def关键字--定义 func函数名--和变量定义规则一样 ()必须要写格式 :声明 语句结束 s=[1,2 ...
- Win10中用yolov3训练自己的数据集全过程(VS、CUDA、CUDNN、OpenCV配置,训练和测试)
在Windows系统的Linux系统中用yolo训练自己的数据集的配置差异很大,今天总结在win10中配置yolo并进行训练和测试的全过程. 提纲: 1.下载适用于Windows的darknet 2. ...