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各组件详解——Intent”,这一主题深入探讨了Android开发中至关重要的Intent组件。本文将从多个角度解析Intent的功能、应用场景及其内部结构,为开发者提供全面的理解。 ### Intent概述...
在Android操作系统中,Intent是一种强大的组件间通信机制,它允许应用程序的不同部分之间传递消息和启动操作。本资源“安卓Android源码——Intent.rar”可能包含了Intent的详细源代码分析,帮助开发者深入理解Intent...
intent.addCategory("android.intent.category.DEFAULT"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromFile(new File(param)); intent.setDataAndType(uri, "image/*"); return ...
本资料"Android Intent切换.zip"包含了关于Intent使用的源码示例,通过解析其中的文件,我们可以深入理解Intent的工作机制。 首先,`源码说明.txt`可能包含对Intent使用的基本介绍和代码解释。通常,这种文本文件会...
通过分析这个"Intent.zip"中的源码,开发者可以深入理解Intent的工作原理,学习如何正确地创建和使用Intent,以及如何设计和解析IntentFilter,这对于提高Android应用的交互性和灵活性具有重要意义。
intent.addCategory("android.intent.category.DEFAULT"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Uri uri = Uri.fromFile(new File(param)); intent.setDataAndType(uri, "image/*"); return ...
<category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" android:host="example.com" /> </intent-filter> ``` 5. 使用FLAG: - FLAG_ACTIVITY_NEW_TASK:开启新的任务...
- Android系统使用IntentResolver来解析Intent,寻找匹配的组件。开发者可以自定义IntentResolver实现更复杂的组件查找逻辑。 9. **安全与性能**: - 跨应用传递数据时,需注意数据的安全性,避免暴露敏感信息。 ...
在这个"AndroidIntent切换.zip"压缩包中,可能包含了一系列关于如何在Android应用中使用Intent进行Activity切换的示例和教程。 首先,理解Intent的基本概念是至关重要的。Intent分为显式Intent和隐式Intent。显式...
本资料"Android源码——Intent切换.zip"很可能是关于Intent在Android应用开发中的详细解析,包括Intent的创建、使用方式以及源码分析。 首先,Intent分为显式Intent和隐式Intent两种类型。显式Intent明确指定了要...
本资源包“Android应用源码之Intent_Intent.zip”应该包含了关于Intent使用的一些示例代码和解析,帮助开发者深入理解Intent的工作原理。 1. **Intent的类型** Intent主要有两种类型:显式Intent和隐式Intent。...
<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category...
在Android应用开发中,Intent是一种强大的机制,它用于在组件之间传递消息,是应用程序中不同组件(如Activity、Service、BroadcastReceiver)之间的桥梁。在这个"Android应用源码之7.Intent初级学习.zip"压缩包中,...
二、Android如何解析Intent 当一个Intent被创建并传递时,Android系统会根据其描述进行解析,查找匹配的组件。解析过程主要考虑以下因素: 1. **动作匹配**:系统遍历Manifest文件中的所有声明,寻找具有与Intent...
当发送一个隐式Intent时,Android系统会根据Intent的元数据(Action、Data、Category)找到最适合的组件来处理,这就是Intent解析过程。 10. ** FLAGs 和 Extra Options**: Intent还支持各种FLAG,如`FLAG_...
通常只包含那些声明了特定Intent Filter的活动(如 `<action android:name="android.intent.action.MAIN" />` 和 `<category android:name="android.intent.category.LAUNCHER" />`)。 三、Launcher工作原理 ...
<category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> ``` 系统会根据Intent中的信息匹配IntentFilter,找到最适合的组件来处理Intent。 ...
<category android:name="android.intent.category.DEFAULT" /> </intent-filter> ``` 这样,当Intent的动作和数据与过滤器匹配时,TargetActivity就能接收到Intent。 6. **文件列表解析** 在提供的文件列表...
本文将深入解析Intent的启动过程及其在Android应用开发中的关键作用。 一、Intent的基本概念与类型 Intent是Android系统中的一种消息对象,它封装了应用程序想要执行的操作和操作所需的数据。Intent主要有两种类型...