一、要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent

1、显式启动

显式启动是我们日常开发中必不可少,基本上每天都会写的

Intent intent = new Intent(MainActivity.this,OtherActivity.class);startActivity(intent);

2、隐式启动

与显式启动不同之处在于使用隐式启动需要在我们AndroidManifest.xml清单配置文件中的所需启动的Activity中添加过滤器如下:

<activity android:name=".OtherActivity"><intent-filter><action android:name="com.ghost.deng.OTHER"><category android:name = "android.intent.catrgory.DERAULT"></intent-filter></activity>

然后在我们的Activity中进行隐式启动

Intent intent = new Intent("com.ghost.deng.OTHER");startActivity(intent);

使用隐式启动我们不仅可以启动自己的Activity,还可以启动其他的Activtiy,例如打电话也是通过隐式启动来实现的

Intent intent = new Intent(Intent.ACTION_CALL);Uri data = Uri.parse("tel:"+phoneNum);intent.setData(data);startActivity(intent);

同理我们可以想像,别人如果知道我们的这个action是不是就可以跳转到我们对应的Activity了呢?

答案是肯定的,那么如果我们的意图即action里的这个name与其他应用程序里面的Activity相同时会怎么样呢?

系统会让你选择打开其中一个,如果一个都没有的话,系统就会报错.

二、intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data

理论上来说,如果intent不指定category,那么无论intent filter的内容是什么都应该是匹配的。但是,如果是implicit intent,android默认给加上一个CATEGORY_DEFAULT,这样的话如果intent filter中没有android.intent.category.DEFAULT这个category的话,匹配测试就会失败。所以,如果你的 activity支持接收implicit intent的话就一定要在intent filter中加入android.intent.category.DEFAULT。

例外情况是:

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

如果自己定义的某个Activity要通过隐式启动,在AndroidManifast.xm那么必须加上android.intent.category.DEFAULT,否则不起作用。除此之外,category的用途还有很多,

比如做个桌面,按home键时启动自己做的应用

<activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER"/><category android:name="android.intent.category.HOME" /></intent-filter>
</activity>

在intent中是如何配置那三个匹配数据的呢,也就是说,在不直接指定要跳转的Activity的时候,为Intent提供一些相关的参数,让其自动去和AndroidManifest.xml中已有的Activity去匹配

IntentFilter在xml中的三個主要的参数:action,categary,data。

我们通过Intent的构造函数或者Intent提供的方法可以指定这个三个参数:

intent.setAction(action);
intent.setData(data);
intent.addCategory(category);

三、android.intent.action.MAIN和android.intent.category.LAUNCHER关系

一个应用程序可以有多个Activity,每个Activity是同级别的,那么在启动程序时,最先启动哪个Activity呢?有些程序可能需要显示在程序列表里,有些不需要。怎么定义呢?android.intent.action.MAIN决定应用程序最先启动的Activity ,android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里,Main和LAUNCHER同时设定才有意义。如果有多个同级的Activity都有过滤器

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

则只有最前面的Activity的 <action android:name="android.intent.action.MAIN" /> 有效,启动该程序时,执行的是该Activity。且在程序列表中有多个图标,这些Activity都在程序列表中显示,该Application有多个入口,执行不同的Activity,但是整个程序的主入口(整个程序最先运行的那个activity)只有最先定义的那个Activity。

如 果一个应用没有LAUNCHER则该apk仍能安装到设备上,但是在主程序图中看不到。如果给那个Activity 设定了LAUNCHER,且同时设定了Main,则这个Activity就可出现在程序图中;如果没有Main,则不知启动哪个Activity,故也不会有图标出现。

category中intent-filter介绍相关推荐

  1. vue 中的el表达式_Vue中vue.filter()的使用方法介绍(过滤)

    本篇文章给大家带来的内容是关于Vue中vue.filter()的使用方法介绍(过滤),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Vue过滤器 {{msg |msgFormat}} ...

  2. iOS运行时-使用Runtime向Category中添加属性以及运行时介绍

    前言 了解OC的都应该知道,在一般情况下,我们是不能向Category中添加属性的,只能添加方法,但有些情况向,我们确实需要向Category中添加属性,而且很多系统的API也有一些在Category ...

  3. Android中Intent介绍

    Android中Intent主要分为显式Intent和隐式Intent,今天会主要讲隐式Intent 一.显式Intent 最常用的就是下面这种形式 Intent intent = new Inten ...

  4. intent Filter

    intent Filter 一.介绍 如果一个 Intent 请求在一片数据上执行一个动作, Android 如何知道哪个应用程序(和组件)能用来响应这个请求呢? Intent Filter就是 用来 ...

  5. 3.1 Android组件intent filter

    3.1.0 Intent filter基本概念 前面章节我们说到了Intent,Intent对象中除了ComponentName可以直接指定目标组件外,其它的属性都无法直接指定目标组件.当然我们这里不 ...

  6. Android中Intent传递对象的两种方法(Serializable,Parcelable)

    这篇文章转自博客园 Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putPa ...

  7. Android中Intent和Intent过滤器详解

    众所周知,Android开发中,Intent是个比较常见的应用组件,今天,我就参考Google官方文档书写一次详细的从头到尾的博文. *Intent是一个消息传递对象,可以使用它从其他应用组件请求操作 ...

  8. Intent Flag介绍 intent.addFlags()

    FLAG_ACTIVITY_CLEAR_TOP 如果设置,并且这个Activity已经在当前的Task中运行,因此,不再是重新启动一个这个Activity的实例,而是在这个Activity上方的所有A ...

  9. js中数组filter过滤奇偶数_js--数组的filter()过滤方法的使用

    前言 你还在通过for循环遍历数组吗?你还在遍历之后一项一项的通过if判断过滤你需要的数据吗?你还在写着一大堆代码实现一个简单的过滤数据功能吗?那么,今天他来了.他就是这里要介绍的es6中数组filt ...

最新文章

  1. sskeychain使用(轻量级框架)
  2. ICinsights:中国芯片难达成既定的2025目标
  3. java 之 模板模式(大话设计模式)
  4. 《R语言实战》第3章
  5. 多智能系统的第一个小视频
  6. Shell脚本批量清除Nginx缓存
  7. python适合自学编程吗-没编程基础可以学python吗
  8. CICD详解(二)——Jenkins持续集成原理
  9. 智慧校园大数据平台建设和运营整体解决方案
  10. win10在哪打开ie浏览器?windows11怎么打开ie浏览器?
  11. js重力感应小球游戏
  12. 【历史上的今天】9 月 2 日:互联网的“诞生日”;三星逐步跌落神坛;世界上第一个 ATM 自动取款机
  13. java lambda表达式 list转string
  14. GMO宣布聘用高级管理人员Amy Shang来领导公司在大中华区的工作
  15. 应急响应常用命令(Linux)---读书笔记
  16. ASP.NET+SQL网上校友录设计与实现
  17. 肺结节圆形边界光滑_发现了肺结节如何判断良恶性?
  18. 移动应用开发测试工具Bugtags集成和使用教程
  19. 基于安卓/android/微信小程序的高校党员掌上党支部APP#计算机毕业设计
  20. Android获取电池电量信息的几种方式

热门文章

  1. jquery easyui Tree API
  2. Python图像识别实战(四):搭建卷积神经网络进行图像二分类(附源码和实现效果)
  3. 浅析云计算数据中心动力环境监控系统-Susie 周
  4. 防止电脑锁屏脚本power shell版
  5. python材料计算程序_把python当日常的”计算器”用
  6. 深入理解Java自动装箱拆箱机制(Autoboxing and unboxing)
  7. spring框架:简述AOP的使用(xml方式和注解方式)
  8. mysql数据库查询 g_数据库MySQL补充( 查询)
  9. 6S管理在制药生产车间应用的必要性及实施办法
  10. 极速60秒!用10条命令检查Linux服务器性能