`
苗振忠
  • 浏览: 59534 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Intent组件

 
阅读更多
原文地址:http://52android.blog.51cto.com/2554429/499134,分享一下微笑

Intent是Android中的重要组件,可以被认为是不同组件之间通信的“媒介”或者“信使”。使用它可以启动Activity,Service还可以发起一个广播(Broadcast)。Intent对象由Action、Data、Category、Component和Extra组成。下面就以上属性进行分析说明。

1. Component

在使用Intent显式的启动目标组件时,需要指定组件的名称(ComponentName)。Intent的组件名称对象由ComponentName类来封装。代码如下:

// 实例化组件名称   
  ComponentName cn = new ComponentName(MainActivity.this, "com.amaker.ch06.app1.MyActivity");    
  // 实例化Intent   
 Intent intent = new Intent();    
  // 为Intent设置组件名称属性   
    intent.setComponent(cn);    
 // 启动Activity   
  startActivity(intent);   


同时,在目标组件中,可以获得传过来的Intent的属性。如下:

 // 获得Intent    
Intent intent = this.getIntent();        
// 获得组件名称对象        
ComponentName cn = intent.getComponent();   
// 获得包名称    
String packageName = cn.getPackageName();   
// 获得类名称    
String className = cn.getClassName();    
// 实例化TextView    
tv = (TextView)findViewById(R.id.TextView);   
// 显示    
tv.setText("组件包名称:"+packageName+"\n"+"组件类名称:"+className);   


除了使用setComponent() 之外,还可以使用setClass(),setClassName()来显式指定目标组件。

2. Action

Action规定了Intent要完成的动作,是一个字符串常量。使用setAction()来设置Action属性,使用getAction()来获得Action属性。既可以使用系统内置的Action,也可以自己定义。
自定义Action:

public static final String MY_ACTION="com.amaker.ch07.app.MY_ACTION";    
.......    
Intent intent = new Intent();    
// 为Intent设置Action属性    
intent.setAction(MY_ACTION);    
// 启动Activity    
startActivity(intent);  
对于使用自定义的Action的隐式发送组件的过程中,需要在目标组件的AndroidManifest.xml中声明过滤器规则,将Action加入其中。如下:

<intent-filter>   
<action android:name="com.amaker.ch06.app.MY_ACTION" />   
<category android:name="android.intent.category.DEFAULT" />   
</intent-filter>  

访问系统的Action方法同上,区别在于无需自定义Action字符串,直接使用系统内部的就可以,此处不再赘述。

3. Intent的Data和Type属性

不同的动作伴随着不同种类的数据规格。setData()方法指定数据只能为一个URI,setType()指定它只能是一个MIME类型, 而setDataAndType()指定它同时为URI和MIME类型。URI通过getData()读取,类型则通过getType()。
当匹配一个意图到一个能处理数据的组件时,除了它的URI外,通常需要知道数据类型(它的MIME类型)。 比如,一个能显示图片的组件不应该被要求去播放一个声音文件。如下:

<data android:type="video/mpeg" android:scheme="http" . . . />    
<data android:type="audio/mpeg" android:scheme="http" . . . />     


下面代码是开启打电话界面的程序片段:

data="content://contacts/people/1";    
uri=Uri.parse(data);   
intent=new Intent();    
intent.setData(uri);    
intent.setAction(Intent.ACTION_VIEW);    
startActivity(intent);     


下面的代码是Type类型的数据的访问:

Intent intent=new Intent();    
 intent.setType("vnd.android.cursor.item/phone");    
 intent.setAction(Intent.ACTION_GET_CONTENT);   
 startActivity(intent);    
 break;      

4. Category

该属性是一个执行Action的附件信息。可以看作是设置一些特性的设置。

常量

含义

CATEGORY_BROWSABLE

目标活动可以被浏览器安全的唤起来显示被一个链接所引用的数据-比如,一张图片或一条e-mail消息。

CATEGORY_GADGET

这个活动可以被嵌入到充当配件宿主的另外的活动里面。

CATEGORY_HOME

这个活动将显示桌面,也就是用户开机后看到的第一个屏幕或者按HOME键时看到的屏幕。

CATEGORY_LAUNCHER

这个活动可以是一个任务的初始活动并被列在应用程序启动器的顶层。

CATEGORY_PREFERENCE

目标活动是一个选择面板。

5. Extra属性

该属性是添加一些组件的附加信息。代码如下:

Uri uri = Uri.parse("smsto://10086");     
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);     
intent.putExtra("sms_body", "测试短信");     
startActivity(Intent.createChooser(intent, "发送短信"));     
以上程序片是发送短信的页面出现,在其中的联系人和文本信息框中出现的是10086和“测试短信”。另外,使用Extra属性也可以向自定的其他组件发送数据。在目标组件中可以接收。代码如下:

Intent intent=getIntent();    
int user=intent.getIntExtra("userId",0);    


6. Intent Filter

在不指定目标组件名称的时候,需要使用隐式寻找目标组件的方法。,这就需要通过Intent Filter来实现。目标Intent在AndroidManifest.xml中的Intent Filter标签中指定Action,Data和Category。然后源Activity通过查找已经注册在AndroidManifest.xml中的所有Intent,最终找到匹配的Intent。声明方法如下:

<activity android:name="TestActivity" >   
<intent-filter>   
<action android:name="com.amaker.ch06.app.TEST_ACTION1"/>   
<action android:name="com.amaker.ch06.app.TEST_ACTION2"/>   
<action android:name="com.amaker.ch06.app.TEST_ACTION3"/>   
<action android:name="android.intent.action.VIEW"/> 0  
//Type和data属性都在这个标签中设置。URI被拆分成两个部分,scheme和path。  
<data android:scheme="content" android:path="com.amaker.ch07.app/abc"/>   
<data android:scheme="http" android:path="www.google.com" />   
 //这行必须添加  
<category android:name="android.intent.category.DEFAULT"/>  
<category android:name="android.intent.category.BROWSABLE" />   
<category android:name="com.amaker.ch07.app.CATEGORY1"/>   
</intent-filter>   
</activity>   
在过滤器中,如下几点需要注意:
a. 如果Intent指定了Action,则目标组件中的过滤器Action列表中必须包含这个Action,否则不能匹配。如果Intent没有指定,则自动通过。
b. android.intent.category.DEFAULT属性是启动Activity默认的属性,这个必须添加。
c. 如果有多个Intent过滤规则相同,那么会自动提示使用哪个。
d. 如果一个组件没有任何的意图过滤器,那它只能接收显式意图。一个带过滤器的组件可以同时接收显式和隐式意图。
分享到:
评论

相关推荐

    智能家居系统 Intent组件-教案.doc

    【智能家居系统 Intent组件】 Intent组件在Android开发中扮演着至关重要的角色,特别是在构建智能家居系统时。它是连接不同应用或同一应用内不同组件的关键桥梁,负责传递数据和触发操作。本教案将深入探讨Intent...

    Android Intent 组件通信与广播消息

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

    Android、教程<经典> 8 Intent组件与ContentProvider

    **Intent组件** Intent在Android中扮演着消息传递的角色,它允许应用程序的不同组件之间进行通信。Intent有两种主要类型:显式Intent和隐式Intent。 1. **显式Intent**:这种Intent明确指定了要启动的目标组件...

    Android的Intent实验

    在Android开发中,Intent是一种非常重要的组件,它用于在应用程序的不同组件之间传递消息,实现活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)以及内容提供者(Content Provider)之间的交互...

    android各组件详解- Intent.

    标题与描述均指向了“Android各组件详解——Intent”,这一主题深入探讨了Android开发中至关重要的Intent组件。本文将从多个角度解析Intent的功能、应用场景及其内部结构,为开发者提供全面的理解。 ### Intent概述...

    移动互联网-Intent组件.ppt

    移动互联网应用

    从源码剖析Android中的Intent组件

    【Intent组件解析】 Intent在Android系统中扮演着至关重要的角色,它是组件间通信的主要桥梁,负责连接四大组件:Activity、Service、BroadcastReceiver和ContentProvider。Intent不仅能够启动新的Activity,还可以...

    智能家居系统-Intent组件-课件.ppt

    智能家居系统应用

    Android Intent测试例子

    Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。简单来说Intent就是用于组件(这里的组件自然是四大组件)之间传递消息。 它的基本用途:启动Activity,启动服务,传递广播。

    Android Intent

    Intent在Android应用程序开发中扮演着至关重要的角色,它是Android系统组件间通信(IPC)的主要机制。通过Intent,开发者能够启动其他Activity、Service,传递数据,甚至执行BroadcastReceiver的动作。在《Android...

    Android_Intent和Intent_Filter详解

    Android Intent是 Android 组件间通信的载体,它们之间的通信是通过 Intent 对象在不断传递实现的。Android 的三大核心组件 Activity、Service 和 BroadcastReceiver 都是通过 Intent 对象进行通信的。 Intent 的...

    android中使用显式intent完成应用的步骤及核心代码2022优秀文档.pptx

    显式Intent是一种明确指出了目标组件名称的Intent,通过指定Intent组件名称来实现的Intent。 知识点1: Intent的定义 Intent是一种在不同组件之间传递请求消息的机制,是应用程序发出的请求和意图。作为一个完整的...

    android中隐式intent的使用说明2022优秀文档.pptx

    Android 中的 Intent 机制是 Android 应用程序之间通信的基础,Intent 负责描述一次操作的动作、动作涉及数据、附加数据等信息,然后 Android 系统根据 Intent 的描述找到对应的组件,并将 Intent 传递给调用的组件...

    Android移动开发 项目化教程.PPT .pptx

    Intent 对象包含了接收该 Intent 的组件信息和 Android 系统信息,一般来说,一个完整的 Intent 包含组件的名称、动作、数据、种类、额外和标记等一系列内容。 五、项目实践 通过本教程,读者可以学习如何使用 ...

    Android应用交互及任务栈处理.pdf

    为了有效地管理这些交互,Android引入了任务栈的概念以及Intent组件作为不同组件和应用间通信的媒介。 任务栈是Android中用于管理活动实例的后进先出(LIFO)栈结构,它帮助管理用户的导航历史和任务。当用户启动一...

    android用Intent调用常用的系统组件

    在Android开发中,Intent是一种非常重要的机制,它用于在组件之间传递消息,实现应用程序内部或应用程序之间的交互。本文主要探讨如何使用Intent调用常见的系统组件,涵盖了搜索、浏览网页、地图导航、拨打电话、...

    Android Intent和Intent Filter详解

    1. **隐式Intent**:没有指定具体组件的Intent,系统会根据Intent的信息(Action、Data、Category)匹配最适合的组件。 2. **显式Intent**:指定了具体组件名称的Intent,直接启动指定组件。 **Note Pad Example** ...

    安卓Android源码——MyIntentJianqieban.rar

    2. **Intent组件通信**:阐述Intent如何连接Android的四大组件(Activity、Service、BroadcastReceiver和ContentProvider),以及它们之间的交互方式。 3. **IntentFilter**:解释IntentFilter的概念,它是如何帮助...

    android整合--intent

    在Android开发中,Intent是一种非常重要的组件间通信(IPC)机制。Intent主要用于启动或与其它应用程序组件进行交互,如活动(Activity)、服务(Service)、广播接收器(BroadcastReceiver)以及内容提供者...

Global site tag (gtag.js) - Google Analytics