`
chengfengyang
  • 浏览: 22276 次
社区版块
存档分类
最新评论

Android intent intent-filter

阅读更多
应用程序的组件为了告诉Android自己能响应、处理哪些隐式Intent请求,可以声明一个甚至多个Intent Filter。每个Intent Filter描述该组件所能响应Intent请求的能力——组件希望接收什么类型的请求行为,什么类型的请求数据。比如之前请求网页浏览器这个例子中,网页浏览器程序的Intent Filter就应该声明它所希望接收的Intent Action是WEB_SEARCH_ACTION,以及与之相关的请求数据是网页地址URI格式。如何为组件声明自己的Intent Filter? 常见的方法是在AndroidManifest.xml文件中用属性< Intent-Filter>描述组件的Intent Filter。

  前面我们提到,隐式Intent(Explicit Intents)和Intent Filter(Implicit Intents)进行比较时的三要素是Intent的动作、数据以及类别。实际上,一个隐式Intent请求要能够传递给目标组件,必要通过这三个方面的检查。如果任何一方面不匹配,Android都不会将该隐式Intent传递给目标组件。接下来我们讲解这三方面检查的具体规则。

  1.动作测试

  Java代码 < intent-filter>元素中可以包括子元素< action>,比如: < intent-filter> < action android:name=”com.example.project.SHOW_CURRENT” /> < action android:name=”com.example.project.SHOW_RECENT” /> < action android:name=”com.example.project.SHOW_PENDING” /> < /intent-filter> < intent-filter>元素中可以包括子元素< action>,比如: < intent-filter> < action android:name=”com.example.project.SHOW_CURRENT” /> < action android:name=”com.example.project.SHOW_RECENT” /> < action android:name=”com.example.project.SHOW_PENDING” /> < /intent-filter>

  一条< intent-filter>元素至少应该包含一个< action>,否则任何Intent请求都不能和该< intent-filter>匹配。如果Intent请求的Action和< intent-filter>中个某一条< action>匹配,那么该Intent就通过了这条< intent-filter>的动作测试。如果Intent请求或< intent-filter>中没有说明具体的Action类型,那么会出现下面两种情况。 (1) 如果< intent-filter>中没有包含任何Action类型,那么无论什么Intent请求都无法和这条< intent- filter>匹配;

(2) 反之,如果Intent请求中没有设定Action类型,那么只要< intent-filter>中包含有Action类型,这个 Intent请求就将顺利地通过< intent-filter>的行为测试。 2.类别测试

  Java代码 < intent-filter>元素可以包含< category>子元素,比如: < intent-filter . . . > < category android:name=”android.Intent.Category.DEFAULT” /> < category android:name=”android.Intent.Category.BROWSABLE” /> < /intent-filter> < intent-filter>元素可以包含< category>子元素,比如: < intent-filter . . . > < category android:name=”android.Intent.Category.DEFAULT” /> < category android:name=”android.Intent.Category.BROWSABLE” /> < /intent-filter>

  只有当Intent请求中所有的Category与组件中某一个IntentFilter的< category>完全匹配时,才会让该 Intent请求通过测试,IntentFilter中多余的< category>声明并不会导致匹配失败。一个没有指定任何类别测试的 IntentFilter仅仅只会匹配没有设置类别的Intent请求。 3.数据测试

  数据在< intent-filter>中的描述如下: Java代码 < intent-filter . . . > < data android:type=”video/mpeg” android:scheme=”http” . . . /> < data android:type=”audio/mpeg” android:scheme=”http” . . . /> < /intent-filter> < intent-filter . . . > < data android:type=”video/mpeg” android:scheme=”http” . . . /> < data android:type=”audio/mpeg” android:scheme=”http” . . . /> < /intent-filter>

   元素指定了希望接受的Intent请求的数据URI和数据类型,URI被分成三部分来进行匹配:scheme、 authority和path。其中,用setData()设定的Inteat请求的URI数据类型和scheme必须与IntentFilter中所指定的一致。若IntentFilter中还指定了authority或path,它们也需要相匹配才会通过测试。

  4.简单例子说明

  讲解完Intent基本概念之后,接下来我们就使用Intent激活Android自带的电话拨号程序,通过这个实例你会发现,使用Intent并不像其概念描述得那样难。最终创建Intent的代码如下所示。

  Intent i = new

Intent(Intent.ACTION_DIAL,Uri.parse(”tel://13800138000″));

  创建好Intent之后,你就可以通过它告诉Android希望启动新的Activity了。

  startActivity(i);

  Activity启动后显示界面如下:


Android intent intent-filter
  





5.总结说明

  这篇文章是我刚开始学习Android时看到的,当时理解的不是很深入,现在再回头看这篇文章总结的很详细,在这里与大家分享。
分享到:
评论

相关推荐

    android intent and intent-filters

    在Android应用开发中,Intent是连接应用程序组件的重要机制,它是一种消息传递对象,用于启动其他组件(如Activity、Service、BroadcastReceiver)或者传递数据。Intent-filters则定义了组件能够响应的Intent类型,...

    Data、Type属性与Intent-filter配置

    在Android应用开发中,Intent是连接应用程序组件之间通信的关键机制。Intent-filter的配置对于正确地启动和接收...在Android系统中,Intent-filter是组件间通信的关键组成部分,它决定了哪些组件能响应用户的特定操作。

    Android Intent Filter用法

    在Android应用开发中,Intent Filter是一个至关重要的概念,它用于定义一个组件(如Activity或BroadcastReceiver)能够响应的Intent类型。Intent Filter就像一个过滤器,筛选出应用可以处理的特定操作,使得系统能够...

    intent-action-send.7z

    在Android系统中,Intent是一种非常重要的组件间通信机制,它用于启动其他应用程序组件或传递数据。"intent-action-send"这个主题通常与发送数据到其他应用的功能相关,比如分享文本、图片或者文件。在这个场景下,...

    Android Intent 、intent-filter详解

    参考...,讲解的很好 1.什么是Intent(定义) Intent这个单词的意思就是”意图,目的,意向”,Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。 个

    Android intent原理分析

    ### Android Intent原理深入解析 #### 一、概览与引言 在移动开发领域,特别是在Android平台上,**Intent**作为核心通信机制之一,扮演着关键角色。它不仅用于应用程序内部不同组件之间的通信,也是实现跨应用通信...

    Android的Intent实验

    组件通过声明Intent过滤器(Intent Filter)来表明它们可以处理哪些Intent。过滤器包含动作、数据URI、类别等元素,系统会对比Intent和过滤器来决定Intent应由哪个组件处理。 9. **Intent的生命周期** 在Activity...

    Android Intent 组件通信与广播消息

    【Android Intent 组件通信与广播消息】 Intent是Android系统中至关重要的组件通信工具,它扮演着消息传递者的角色,使得应用程序的不同组件(如Activity、Service、BroadcastReceiver)能够相互通信。Intent不仅...

    Activity_intent-filter

    而 `Intent Filter` 是Android系统中一个至关重要的概念,它允许系统和服务之间进行通信,使得不同应用可以相互调用功能。当我们说到 "Activity_intent-filter" 时,我们实际上是在讨论如何通过设置 `intent-filter`...

    Android学习总结-Intent详解.doc

    Intent在Android开发中扮演着至关重要的角色,它是四大组件(Activity、Service、BroadcastReceiver和ContentProvider)间通信的关键。Intent不仅用于应用间的交互,也可以在同一个应用内的不同组件之间传递信息。...

    android Intent的用法

    在Android开发中,Intent是一种非常重要的组件间通信机制。它被用来启动活动(Activity)、服务(Service)或者广播接收器(Broadcast Receiver),并且可以传递数据和执行动作。本篇文章将详细解析Intent的用法。 ...

    Android经典设计源码-Intent_ComponentSample.rar

    【Android经典设计源码-Intent_ComponentSample.rar】是一个关于Android应用程序开发的学习资源,主要涵盖了Android中的Intent和组件(Component)的使用。这个压缩包包含了Intent_ComponentSample项目的所有源代码...

    经典的android intent 窗口切换 窗口打开

    在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间建立通信桥梁,尤其在窗口(Activity)之间的切换和数据传递上扮演着核心角色。Intent不仅可以启动新的Activity,还可以启动Service、...

    Android Intent 过滤例子

    Intent Filter是Intent系统的一部分,允许Android系统知道一个组件(如Activity或BroadcastReceiver)能响应什么样的Intent。在这里,我们将深入探讨Android Intent过滤器的概念、工作原理以及如何在实际应用中设置...

    Android代码-Intent切换.zip

    6. **Intent Filter**:为了响应隐式Intent,目标组件需要在清单文件(AndroidManifest.xml)中声明Intent Filter,定义其能处理的动作、数据和类别。 7. **数据类型和 MIME 类型**:Intent中的数据可以关联MIME...

    Android-Intent-Action.zip_action _android

    通过使用Intent Filter,组件可以声明它们能够处理哪些Action以及何种类型的数据。这样,当系统接收到一个Intent时,会根据Intent的Action和Data匹配合适的组件来执行。 在实际开发中,理解并熟练运用Intent Action...

    android中intent使用示例

    在Android开发中,Intent是一种非常重要的组件间通信机制。它被用来启动活动(Activity)、服务(Service)或者传递数据。本示例将深入探讨Intent的基本用法和常见应用场景。 首先,Intent分为显式Intent和隐式...

    AndroidIntent1 (2).zip

    本压缩包"AndroidIntent1 (2).zip"包含了实现代码跳转的各种示例,这将帮助我们深入理解Intent的工作原理和用法。 1. **Intent基本类型** - **显式Intent**: 显式Intent通过指定目标组件的完整类名来明确指定要...

Global site tag (gtag.js) - Google Analytics