`

Intent及IntentFilter学习

 
阅读更多
隐式Intent理解
http://www.cnblogs.com/xirihanlin/archive/2009/07/31/1535609.html
http://blog.csdn.net/shmily_yang/article/details/5283694
http://hi.baidu.com/lfcaolibin/blog/item/87e66424c02f986b34a80f20.html

Android Intent Filter简单使用
http://bigcat.easymorse.com/?p=1454

http://blog.csdn.net/fenghome/article/details/5777855
http://blog.csdn.net/henanchina/article/details/5053691
什么是Intent
http://book.51cto.com/art/200908/142683.htm

定制android启动界面
http://blog.chinaunix.net/space.php?uid=20355083&do=blog&id=1963979

IntentFilter学习
http://www.apkbus.com/android-17556-1-1.html
http://www.cnblogs.com/Android_2011/archive/2011/06/12/2078643.html
引用
IntentFilter类
IntentFilter类表示Intent过滤器, 大部分情况下, 每一个component都会定义一个或多个IntentFilter, 用于表明其可处理的Intent.
一般来说, component的IntentFilter应该在AndroidManifest.xml文件中定义.
定义的方法: 在<activity>, <receiver>, <service>元素中增加一个或多个<intent-filter>子元素. 如:
<!-- 声明作为程序入口的Activity -->
<activity android:name=".FirstActivity">
        <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

IntentFilter与隐式Intent
android系统处理隐式Intent时, 会比较Intent和IntentFilter的action, data, category属性, 如果以上3个属性全都相符的话, 则IntentFilter所属的component就可以作为目标组件的候选(存在多个符合条件的component时).
1. 测试action属性. intent最多只能定义1个action, 而filter可以定义1个或多个action.
通过action测试的条件为: filter定义了intent的action. 例如intent的action为"android.intent.action.MAIN", 则定义了"android.intent.action.MAIN"这个action的filter都能通过action测试(当然, filter还可以包含更多额外的action).
如果filter没有定义action, 则这个filter将阻塞所有intent. 如果intent没有定义action, 那么只要filter定义了action就可以通过action测试.
2. 测试category属性. intent可以任意多个category, filter也可以任意个category. 通过category测试的条件为: filter定义了intent的所有category. 例如intent定义了"android.intent.category.DEFAULT"和"cn.xing.intent.category.UPLOAD"这2个category, 则定义了以上2个category属性的filter才能通过测试(当然, filter还可以包含更多额外的category).
根据上面的规则, 如果一个intent没有定义category, 则所有filter都可以通过category测试. 但是有一种例外: 以startActivity(intent)方式启动一个activity时, 系统为会intent增加一个值为"android.intent.category.DEFAULT"的category, 这就意味着每一个期望通过category测试的activity, 都要在其filter中定义"android.intent.category.DEFAULT"(除了作为程序入口的activity).
3. 测试data属性. intent最多只能定义1个data, filter则可以定义多个data.
通过data测试的条件为:
a. 如果intent没有指定data和data type, 则只有没有定义data和date type的filter才能通过测试;
b. 如果intent定义了data没有定义data type, 则只有定义了相同data且没有定义date type的filter才能通过测试;
c. 如果intent没有定义data却定义了data type, 则只有未定义data且定义了相同的data type的filter才能通过测试;
d. 如果intent既定义了data也定义了data type, 则只有定义了相同的data和data type的filter才能通过测试.
data属性是一个URI, URI中包含scheme, host, post和path, 典型的URI为:
scheme://host:port/path
scheme, host, post和path都是可选的. 比较2个data时, 只比较filter中包含的部分. 比如filter的一个data只是指定了scheme部分, 则测试时只是比较data的scheme部分, 只要两者的scheme部分相同, 就视为"相同的data".
分享到:
评论

相关推荐

    Android使用Intent和Intentfilter进行通信

    在Android应用开发中,Intent和IntentFilter是两个至关重要的组件,它们构成了Android系统服务和组件之间通信的核心机制。本文将深入探讨Intent与IntentFilter的工作原理、使用方式以及它们在实际应用中的重要性。 ...

    Intent和IntentFilter

    Intent 和 IntentFilter 是 Android 应用程序开发中的两个核心概念,它们构成了组件间通信的核心机制。Intent 可以被理解为一个信息载体,用于在不同的应用程序组件之间传递消息,而 IntentFilter 是一种声明机制,...

    Android组件间通信–深入理解Intent与IntentFilter

    在Android开发中,Intent和IntentFilter是两个至关重要的概念,它们构成了Android组件间通信的核心机制。Intent作为消息载体,能够连接应用内的不同组件,如Activity、Service,甚至跨应用进行通信,实现组件级别的...

    IntentMatcherDemo:Intent 和 IntentFilter 匹配规则案例

    要想使用隐式 Intent 成功启动 Activity, 必须保证 Intent 中 action、category、data 的设置和要启动的 Activity 的 IntentFilter 相匹配。这是一个 Intent 和 IntentFilter 匹配规则演示的小案例。 Intent 和 ...

    Android组件间通信--深入理解Intent与IntentFilter

    在Android开发中,Intent和IntentFilter是实现组件间通信的关键机制。Intent作为消息载体,能够连接不同的应用组件,包括Activity、Service、BroadcastReceiver等,使得它们可以互相传递数据和触发操作。...

    android中Activity和Intent的关系

    在Android操作系统中,Activity和Intent是两个至关重要的概念,它们构成了Android应用交互的核心。...通过不断的实践和学习,开发者可以灵活地利用Activity和Intent实现各种复杂的应用场景,从而提升用户体验。

    [Android开发从零开始].7.Intent初级学习

    在这个初级学习阶段,我们将深入理解Intent的基本概念、类型以及如何使用。 一、Intent基础 Intent在Android系统中扮演着“信使”的角色,它能启动新的Activity或Service,或者向BroadcastReceiver发送广播。Intent...

    Intent学习

    【Intent学习】 Intent是Android系统中的一个核心概念,它是应用程序之间通信的重要桥梁,用于在不同的组件之间传递消息和数据。Intent不仅可以启动活动(Activity)、服务(Service),还可以启动广播接收器...

    android整合--intent

    IntentFilter定义了Action、Data、Category等,当Intent与IntentFilter匹配时,组件才能接收到Intent。 总结,Intent在Android开发中起着桥梁的作用,连接起各个组件,使得组件间能够高效地通信和协作。理解并熟练...

    Intent系统调用示例

    在Android开发中,Intent是一种非常重要的组件间通信机制。它被用来启动活动(Activity)、服务(Service)或者广播接收器...通过IntentDemo项目的学习,开发者可以更深入地掌握Intent的工作原理和应用场景。

    Android应用源码之7.Intent初级学习.zip

    总结,"Android应用源码之7.Intent初级学习.zip"的学习资料将涵盖Intent的基本概念、创建、启动、IntentFilter、Intent Resolution以及常见应用场景等,对于初学者理解Intent在Android开发中的作用和用法具有指导...

    安卓基本知识之Intent学习源代码

    在本"安卓基本知识之Intent学习源代码"中,我们将深入探讨Intent的工作原理、类型、构造及其在实际开发中的应用。 一、Intent的基本概念 Intent是Android系统中的一个消息对象,它用来表示一个动作和动作的数据。...

    android intent源码学习

    在这个"android intent源码学习"的主题中,我们将深入探讨Intent的工作原理和源码实现。 首先,Intent分为显式Intent和隐式Intent。显式Intent通过指定组件的完全限定类名来直接启动目标组件,而隐式Intent则不指定...

    7.Intent初级学习.rar

    本压缩包“7.Intent初级学习”包含了一系列关于Intent的基础知识,帮助初学者理解并掌握Intent的使用。 1. Intent的基本概念 Intent是一个对象,它封装了应用中的操作请求。通过Intent,开发者可以声明一个意图执行...

    Android Intent 学习

    本学习资料主要围绕“Android Intent”展开,结合实例讲解如何利用Intent进行传值以及实现一个简易计算器。 1. **Intent的基本概念** - Intent是Android中的一个类,它表示一个操作的意图,用于启动Activity或...

    Android源码——Intent切换.zip

    在Android操作系统中,Intent是一种非常核心的组件,它充当了应用程序之间、组件之间通信的桥梁。...通过深入学习和实践,开发者可以更好地利用Intent来实现应用间的交互和数据传递,提升用户体验。

    Data、Type属性与Intent-filter配置

    在Android应用开发中,Intent是连接应用程序组件之间通信的关键机制。Intent-filter的配置对于正确地启动和接收意图至关重要。在给定的标题“Data、Type属性与Intent-filter配置”中,我们关注的重点是如何通过设置`...

    Android+Intent机制实例详解.rar

    在Android应用开发中,Intent是一种强大的机制,它用于在组件之间传递消息,是应用程序中不同组件(如Activity、Service、...通过实例学习和实践,开发者可以更好地掌握Intent的使用,提升应用的用户体验。

Global site tag (gtag.js) - Google Analytics