“android.intent.category.DEFAULT”的目的是什么?

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

Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码:
Intent intent= new Intent(this, B.class)

Implicit Intent没有明确的指定要启动哪个Activity ,而是通过设置一些Intent Filter来让系统去筛选合适的Acitivity去启动。

2、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。

例外情况是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中没有必要加入android.intent.category.DEFAULT,当然加入也没有问题。

我们定义的activity如果接受implicit intent的话,intent filer就一定要加上android.intent.category.DEFAULT这个category。

来自另一篇文章的解释:

在写 AndroidManifest.xml 的时候,一直没有搞明白,什么时候要给 Activityandroid.intent.category.DEFAULT 过滤器,现在才明白。

--------------------------------------------------------------------------------
Android treats all implicit intents passed to startActivity() as if they contained at least one category: "android.intent.category.DEFAULT" (the CATEGORY_DEFAULT constant). Therefore, activities that are willing to receive implicit intents must include "android.intent.category.DEFAULT" in their intent filters
--------------------------------------------------------------------------------

意思是说,每一个通过 startActivity() 方法发出的隐式 Intent 都至少有一个 category,就是 "android.intent.category.DEFAULT",所以只要是想接收一个隐式 Intent 的 Activity 都应该包括 "android.intent.category.DEFAULT" category,不然将导致 Intent 匹配失败。

从上面的论述还可以获得以下信息:
1、一个 Intent 可以有多个 category,但至少会有一个,也是默认的一个 category。
2、只有 Intent 的所有 category 都匹配上,Activity 才会接收这个 Intent。

最新历史版本 :Android中的category大全 -- 未审核

返回文档

  • 编辑时间:06-15 15:14 历史版本编辑者:vikiviki 历史版本:
  • 内容长度:8998 图片数:0目录数:0
  • 修改原因:

Api Level 3(SDK 1.5)和Api Level 4(SDK 1.6):

Xml代码

  1. android.intent.category.ALTERNATIVE
  2. android.intent.category.BROWSABLE
  3. android.intent.category.DEFAULT
  4. android.intent.category.DEVELOPMENT_PREFERENCE
  5. android.intent.category.EMBED
  6. android.intent.category.HOME
  7. android.intent.category.INFO
  8. android.intent.category.LAUNCHER
  9. android.intent.category.MONKEY
  10. android.intent.category.OPENABLE
  11. android.intent.category.PREFERENCE
  12. android.intent.category.SELECTED_ALTERNATIVE
  13. android.intent.category.TAB

Api Level 5(SDK 2.0)增加的:

Xml代码

  1. android.intent.category.CAR_DOCK
  2. android.intent.category.DESK_DOCK

Api Level 6和7没有变化。

Api Level 8(SDK 2.2)增加的:

Xml代码

  1. android.intent.category.CAR_MODE
时间: 2024-11-12 17:44:11

“android.intent.category.DEFAULT”的目的是什么?的相关文章

android之android.intent.category.DEFAULT的用途和使用

转载(http://blog.csdn.net/jason0539/article/details/10049899) 1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码: Intent intent= new Intent(this, B.class): Implicit Intent没有明确的指定要启动哪个Activity

android细节之android.intent.category.DEFAULT的使用

我们知道,实现android的Activity之间相互跳转需要用到Intent, Intent又分为显式Intent和隐式Intent, 显式Intent很简单,比如我在FirstActivity中想跳转到SecondActivity,只需要直接声明就行了: Intent intent = new Intent(FirstActivity.this, SecondActivity.class); 而在使用隐式Intent实现Activity之间跳转的时候,并没有明确指定要打开哪个activity

android.intent.category.DEFAULT

我们需要什么时候加android.intent.category.DEFAULT呢? 1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐式) intent什么是explicit(显示) intent. Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码:              Intent intent= new Intent(this, B.class) Implicit Intent没有明确的指定要启动哪个Activity ,而是通过

什么时候加上android.intent.category.DEFAULT和LAUNCHER

转自:http://blog.csdn.net/ccccdddxxx/article/details/7843070 1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码: Intent intent= new Intent(this, B.class) Implicit Intent没有明确的指定要启动哪个Activity ,而

为什么默认需加android.intent.category.DEFAULT

1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码: [java] view plain copy print? Intent intent= new Intent(this, B.class): Implicit Intent没有明确的指定要启动哪个Activity ,而是通过设置一些Intent Filter来让系统去筛选合

android.intent.action.MAIN 与 android.intent.category.LAUNCHER 的验证理解

第一种情况:有MAIN,无LAUNCHER,程序列表中无图标 原因:android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里 第二种情况:无MAIN,有LAUNCHER,程序列表中无图标 原因:android.intent.action.MAIN决定应用程序最先启动的Activity,如果没有Main,则不知启动哪个Activity,故也不会有图标出现 console里面两种情况显示一样: 下面看一个应用程序可以有两个Activity的情况 点击(此处)折

android.intent.action.MAIN与android.intent.category.LAUNCHER

android.intent.action.MAIN 决定应用程序最先启动的Activity android.intent.category.LAUNCHER 决定应用程序是否显示在程序列表里 在网上看到文章 android.intent.action.MAIN 与 android.intent.category.LAUNCHER 一直知道加上这2个东西就表示程序启动时最先启动的Activity上网查了下这么说的: android.intent.action.MAIN决定应用程序最先启动的 ac

Android(java)学习笔记121:android.intent.action.MAIN 与 android.intent.category.LAUNCHER 理解

先看看网路上的说法: android.intent.action.MAIN决定应用程序最先启动的 Activity android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里 通过实验后,发现有问题?                MAIN 与 LAUNCHER 并不是单纯的各管各的事情:              个人认为正确的说法是               我测试的结果是,如果一个应用没有LAUNCHER则该apk仍能安装到设备上,但是在桌面中图标中

android.intent.category.LAUNCHER和android.intent.action.MAIN

一个应用程序可以有多个Activity,每个Activity是同级别的,那么在启动程序时,最先启动哪个Activity呢? 有些程序可能需要显示在程序列表里,有些不需要.怎么定义呢? android.intent.action.MAIN决定应用程序最先启动的Activity android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里 只要xml配置文件中有这么一个intent-filter,而且里面有这个launcher,那么这个activity就是点击程序