`
huaxin803
  • 浏览: 115549 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android Intents和Intent过滤器(一)

 
阅读更多
Android应用程序有三个核心组件---Activity、Service、Broadcast Receiver,Broadcast receiver是通过叫做Intent的消息来激活的。Intent消息是同一个应用程序或不同应用程序运行后,组件间进行绑定的一种能力。Intent对象本身是一个持有要执行操作的抽象描述的无源数据结构,或者在广播的情况下,经常用它来描述一些已经发生或正在发生的事情。给每种类型组件发送Intent对象都有其独立的机制:

1.为了做某些新的操作,把一个Intent对象传递给Context.startActivity()或Activity.startActivityForResult()方法来启动一个新的Activity或者获取一个既存的Activity。调用startActivityForResult()方法启动的那个Activity也能够把Intent对象传递给Activity.setResult()方法来返回响应的信息。

2.把一个Intent对象传递给Context.startService()方法来初始化一个服务或给一个正在运行的服务发送新的指令。类似地,也能把Intent对象传递给Context.bindService()方法,在调用组件和目标服务之间建立一个连接,如果服务还没有运行可以选择启动。

3.传递给广播方法(如,Context.sendBroadcast()、Context.sendOrderedBroadcast()、或Context.sendStickyBroadcast()方法)的任何Intent对象都被发送给所有的感兴趣的广播接收器。广播的许多类型源于系统代码。

在每种情况下,Android系统都会查找对应的Activity、Service或Broadcast Receiver的设置来响应这个Intent对象,如果需要也会实例化这些组件。在这些消息系统内部没有消息重叠:广播的Intent对象仅发送给Broadcast Receiver组件,不会发送给Activity或Service组件。传递给startActivity()方法的Intent对象仅发送给一个Activity,不会发送给一个Service或Broadcast Receiver组件,等等。

本文档开始介绍Intent对象,然后介绍Android使用的把Intent对象映射给组件的规则---Android系统是如何解析那个组件应该接收对应的Intent消息。对于没有明确命名目标组件的Intent对象,这个过程涉及用与潜在的目标关联Intent过滤器来检测Intent对象。

Intent 对象

一个Intent对象就是一个信息包。它包含了接收这个Intent对象的组件感兴趣的信息(如要执行的动作和动作相关的数据)和Android系统感兴趣的信息(如处理这个Intent对象的组件的分类和有关如何启动目标Activity的指令),主要包含以下信息:

组件名

指的是能够处理Intent对象的组件的名字。这个字段是一个ComponentName对象---它是目标组件的完全类名(如:com.example.project.app.FreneticActivity)和组件所在的应用程序的清单文件中设置的包名(如:com.example.project)的组合。组件名的包部分和清单文件中设置的包名不一定一致。

组件名是可选的,如果设置了组件名,Intent对象就会被发送给这个指定类的实例。如果没有设置,Android系统使用Intent对象中的其他信息来定位合适的目标。

组件名是通过setComponent()、setClass()或setClassName()方法来设置,并且通过getComponent()方法来读取。

动作(Action)

指的是一个要执行的动作的命名字符串,在广播Intent对象的情况下,指的是已经发生和正在报告的动作。Intent类定义很多动作常量,详见下表:

常量

目标组件

动作

ACTION_CALL

Activity

发起电话呼叫

ACTION_EDIT

Activity

为用户显示要编辑的数据

ACTION_MAIN

Activity

作为一个任务的初始Activity启动,没有数据输入和返回输出。

ACTION_SYNC

Activity

用移动设备上的数据同步服务上的数据。

ACTION_BATTERY_LOW

Broadcast Receiver

低电量的一个警告

ACTION_HEADSET_PLUG

Broadcast Receiver

耳麦已经被插入设备,或者从设备上拔出。

ACTION_SCREEN_ON

Broadcast Receiver

显示屏已经被打开

ACTION_TIMEZONE_CHANED

Broadcast Receiver

时区相关的设置已经被改变

对于一般性动作的预定义常量列表,请看Intent类说明。在Android API的其他地方还定义了一些其他的动作。你也可以在自己的应用程序中给Activity组件定义自己的动作字符串。你创建这些动作应该包含应用程序的包名作为动作前缀---例如:com.example.project.SHOW_COLOR.

动作在很大程度上决定了Intent类的结构---特别是data和extras字段---如一个方法名决定了一组参数和一个返回值。由于这个原因,尽可能的指定使用动作的名字是个好主意,并且要把它们与Intent的其他字段紧密的捆绑在一起。换句话说,就是要给你的组件能够处理的Intent对象定义一个完整的协议,而不是定义一个独立的动作。

Intent对象中的动作是由setAction()方法设定的,并且有getAction()方法读取的。

数据(Data)

指的是动作相关的数据的资源标识和数据的MIME类型。不同的动作要跟不同的数据规范类型配合使用。如果动作字段是ACTION_EDIT,那么数据字段应该包含为编辑而显示的数据的资源标识(URI)。如果动作时ACTION_CALL,那么数据字段就应该是tel:带有呼叫号码的URI。类似地,如果动作时ACTION_VIEW,并且数据字段是http:URI。那么接收Activity就应该下载并显示URI所指向的数据。

在把一个Intent对象分配给一个有处理数据能力的组件时,了解附件在URI中的数据类型是至关重要。例如,能够显示图片的组件不应该被调用来播放音频文件。

很多情况下,从URI中能够推断出数据类型---特别是content:URIs,它指明了设备上数据的位置和控制数据的内容提供器。但是数据类型也能够在Intent对象中明确的设定。setData()方法只能给URI指定数据,setType()方法只能给数据指定MIME类型,setDataAndType()方法同时指定URI的数据和数据的MIME类型。通过getData()方法读取数据,getType()方法获取数据类型。

分类(Category)

指的是包含能够处理这个Intent对象的组件类型的相关信息的字符串。任何类别的分类描述都能够被放在Intent对象中。跟action的动作一样,Intent类也定义几个分类常量,如下表:

常量

含义

CATEGORY_BROWSABLE

目标Activity能够安全的调用浏览器来显示链接所指向的数据---如,一张图片或一封电子邮件消息。

CATEGORY_GADGET

Activity能够被嵌入到持有小部件的另一个Activity中

CATEGORY_HOME

Activity显示在主屏幕上,在设备打开时用户看到的第一个屏幕或Home按钮被按下时,用户看到的屏幕。

CATEGORY_LAUNCHER

Activity能够作为任务的初始Activity,并且被列在应用程序启动器的顶层。

CATEGORY_PREFERENCER

目标Activity是一个首选面板。

完整的分类列表请看Intent类的说明。

addCategory()方法把一个分类放到一个Intent对象中,removeCategory()方法删除先前添加的分类,getCategories()方法获取当前Intent对象中的所有分类设置。

附加信息(Extras)

它是以Key-value对的形式发送给处理这个Intent对象的组件的附加信息。就像某些数据URIs要跟动作配对一样,某些特殊的附加信息也需要配对。如,一个ACTION_TIMEZONE_CHANGED类型的Intent对象有一个指定新时区的time-zone附加信息,ACTION_HEADSET_PLUG类型的Intent对象有一个指示耳麦当前是插入还拔出状态的附加信息,对于耳麦类型还有一个name的附加信息。如果你创建了一个SHOW_COLOR动作,颜色值应该被设置在一个key-value对的附加信息中。

Intent对象为插入各种类型的附加数据会有一系列的put…()方法,并为读取数据也会有一组类似的get…()方法。这些方法并行于Bundle对象一些方法。实际上,附加信息能够作为一个Bundle对象使用putExtras()和getExtras()方法来安装和读取。

标记(Flags)

Intent对象有各种标记,很多都是用于指示Android系统如何启动Activity(如,Activity应该属于哪个任务),以及启动后如何处理(如,它是否属于最近的Activity列表)。所有这些标记都在Intent类中定义。

Android系统和平台相关的应用都采用Intent对象来发出面向系统的广播和激活系统定义的组件。

注:本人转载系个人觉得翻译的很好,值得收藏,且自己回头看着方便。

如有兴趣请访问作者官方博客http://blog.csdn.net/FireOfStar

分享到:
评论

相关推荐

    Android开发之旅 Intents和Intent Filters(理论部分)(免费)

    Intent过滤器(Intent Filter)是注册在AndroidManifest.xml中的规则集,用于声明组件能响应哪些类型的Intents。过滤器包含动作、数据和种类的定义,用于匹配Intent的对应属性。 ##### 3.1.1 动作检测 系统检查...

    Intents 和Intent filter 理论介绍

    3.1.1 动作检测:过滤器可以指定一组动作,只有动作匹配的 Intent 才会被接收。 3.1.2 种类检测:过滤器可以声明组件能处理的数据类型,即 MIME 类型。 3.1.3 数据检测:过滤器可以包含数据模式,如 URI 的路径或...

    Android意图和意图过滤器

    #### 一、意图和意图过滤器Intents and Intent Filters 在Android开发中,意图(Intents)是一种重要的通信机制,用于实现应用内部以及不同应用间的交互。它允许一个组件(如Activity、Service或BroadcastReceiver...

    Android利用intent实现分享功能

    在Android中,`Intent`是一种消息对象,它用于启动活动或服务,也可以用于传递数据。为了实现分享功能,我们需要创建一个`Intent`并指定其动作(Action),例如`Intent.ACTION_SEND`。此外,还需要设置要分享的数据...

    Android开发指南中文pdf版最新版本

    Intent过滤器 Activity和任务 Affinity(吸引力)和新任务 加载模式 清理堆栈 启动任务 进程和线程 进程 线程 远程过程调用 线程安全方法 组件生命周期 Activity生命周期 调用父类 服务生命周期 广播接收器生命周期 ...

    android开发中文API,中文类库

    Intent可以带有额外的数据和动作,接收者通过Intent过滤器来声明它能够响应的Intent类型。 - 进程和线程(Processes and Threads):Android系统会管理应用程序的进程和线程。当系统需要释放资源时,可能会杀死一个...

    Android移动开发——个人理财通AS.zip

    6. Intents和Intent过滤器:Android应用通过Intent进行通信,启动新的活动或服务。个人理财通可能使用Intent来触发不同功能,比如打开新的活动或者发送通知。 7. 文件存储:除了SQLite数据库,应用可能还会使用内部...

    Android开发指南中文版

    Intent过滤器 8 Activity和任务 10 Affinity(吸引力)和新任务 11 加载模式 12 清理堆栈 13 启动任务 14 进程和线程 14 进程 15 线程 15 远程过程调用 15 线程安全方法 16 组件生命周期 17 Activity生命周期 17 ...

    Android 开发核心指南

    2. Intent与Intent过滤器(Intents and Intent Filters): - Intent是一种消息传递机制,用于组件之间的通信。它允许开发者启动一个新的Activity,传递数据给Service,或者发送广播。 - Intent过滤器用于声明组件...

    Android开发指南中文版.pdf 清晰版

    **Intent和Intent过滤器(Intents and Intent Filters)** Intent是一种在Android组件之间进行交互的机制,可以启动一个活动、服务或者传递广播。Intent过滤器是用于指定一个组件能够响应哪一种Intent的声明,位于...

    Android编程指南(中文)

    #### 五、意图和意图过滤器 - Intents and Intent Filters **1. 意图过滤器 - Intent Filters** - **意图过滤器**: Intent 过滤器定义了组件可以响应哪些 Intent 类型。这是通过在 AndroidManifest.xml 文件中声明...

    android ophone开发完全讲义源码ch09

    5. **Intent和Intent过滤器(Intents and Intent Filters)**:Intent是Android中的消息对象,用于启动活动、服务或者广播。Intent过滤器则用于声明一个组件可以响应哪些Intent,这在AndroidManifest.xml文件中配置...

    Android应用源码使用ZXing识别条码二维码(简单的实现).zip

    最后,确保在你的应用中正确配置了ZXing的Intent过滤器,这样当用户点击扫描按钮时,系统会启动相机并显示扫描界面。扫描完成后,ZXing会将结果通过Intent返回到你的应用,然后在`onActivityResult`方法中处理。 总...

    Android学习指南中文版(安卓中文翻译)

    Intent过滤器可以指定组件响应的动作(action)、数据(data)和类别(category)。 **1.7 Activity和任务** - **任务(Task)**: 一组按顺序启动的Activity,它们共享相同的back stack。 - **Affinity**: 用于控制...

    android 中文开发指南

    ##### Intent过滤器(Intent Filters) 在`AndroidManifest.xml`文件中,可以为组件添加`<intent-filter>`标签来指定组件响应哪些类型的`Intent`。这使得组件可以在适当的情况下被系统自动激活。 #### 四、Activity...

    android 36 技 高焕堂

    - Intents与Intent过滤器:详述Intent的作用,如何通过Intent跳转活动和服务,以及IntentFilter的配置。 - Fragment管理:分析Fragment的生命周期,以及如何在活动中添加、移除和替换Fragment。 - 回调方法:讲解...

Global site tag (gtag.js) - Google Analytics