您的位置:首页 > 移动开发 > Android开发

Intent详解

2016-01-05 15:35 302 查看
一、简介
一个意图是一个消息对象,你可以用来请求另一个应用程序组件的响应。意图主要是解决Android应用的各项组件之间的通讯,主要有三种基本的使用方式:
(1)启动一个activity
(2)启动一个service
(3)发送广播

二、类型
显示Intent:对于明确指出了目标组件名称的Intent,我们称之为显式Intent。显式Intent直接用组件的名称定义目标组件,这种方式很直接。但是由于开发人员往往并不清楚别的应用程序的组件名称,因此,显示Intent更多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。
隐式Intent:对于没有明确指出目标组件名称的Intent,则称之为隐式Intent。Android将Intent的请求内容和一个叫做IntentFilter的过滤器比较,IntentFilter中包含系统中所有可能的待选组件。如果IntentFilter中某一组件匹配隐式Intent请求的内容,那么Android就选择该组件作为该隐式Intent的目标组件。

三、Intent的相关属性

Intent有以下几个属性:

动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent),扩展信息(Extra)以及标志位(Flags)。其中最常用的是Action属性和Data属性。

1.Component(组件):目的组件

component属性直接指定了Intent的目标组件的类的名称

启动一个Activity
Intent intent = new Intent();
//创建组件,通过组件来响应
ComponentName component = new ComponentName(MainActivity.this, Activity01.class);
intent.setComponent(component);
startActivity(intent);
或者这样
Intent intent= new Intent();
intent.setClass(this, Activity01.class);
startActivity(intent);
再简单一点也可以这样写
Intent intent= new Intent(this,Activity01.class);
startActivity(intent);


2.Action(动作)用来表现意图的行动

Action 是一个用户定义的字符串,用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的Activity 定义时,可以在其<intent-filter >节点指定一个 Action列表用于标识 Activity 所能接受的“动作”。

在 AndroidManifest.xml 文件中为Activity01的<intent-filter >节点设置action常量,可以是多个。需要注意的是在自定义action时,使用activity组件时,必须添加一个默认的类别,f否则将无法Activity01。

<activity
            android:name=".Activity01">
            <intent-filter>
                <action android:name="com.example.action.TIMETRAVEL"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>


启动Activity01

Intent intent= new Intent();
intent.setAction("com.example.action.TIMETRAVEL");
startActivity(intent);

如果有多个组件被匹配成功,就会以对话框列表的方式让用户进行选择。

3.Data(数据) 表示与动作要操纵的数据

Data属性是Android要访问的数据,和action和Category声明方式相同,也是在<intent-filter>中。

Data是用一个uri对象来表示的,uri代表数据的地址,属于一种标识符。

Intent intent= new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);


第2行代码:指定了Intent的action是 Intent.ACTION_VIEW,表示查看的意思,这是一个Android系统内置的动作;

第3行代码:通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用intent的setData()方法将这个Uri对象传递进去。

此时调用的系统自带的浏览器,如下图所示:



4.Category(类别) 用来表现动作的类别

每个Intent中只能指定一个action,但却能指定多个category;类别越多,动作越具体,意图越明确。通过添加category可以很好的解决因为相同的action而匹配多个组件的情况。

<activity
android:name=".Activity01">
<intent-filter>
<action android:name="com.example.action.TIMETRAVEL"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.category.Activity01"/>
</intent-filter>
</activity>


启动Activity01

Intent intent= new Intent();
intent.setAction("com.example.action.TIMETRAVEL");
intent.addCategory("com.example.category.Activity01");
startActivity(intent);


5.Type(类型)

Intent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。

6.extras(扩展信息):扩展信息

是其它所有附加信息的集合。使用extras可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个

动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。

7、Flags(标志位):期望这个意图的运行模式

一个程序启动后系统会为这个程序分配一个task供其使用,另外同一个task里面可以拥有不同应用程序的activity。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android