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
2.Action(动作)用来表现意图的行动
Action 是一个用户定义的字符串,用于描述一个 Android 应用程序组件,一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的Activity 定义时,可以在其<intent-filter >节点指定一个 Action列表用于标识 Activity 所能接受的“动作”。
在 AndroidManifest.xml 文件中为Activity01的<intent-filter >节点设置action常量,可以是多个。需要注意的是在自定义action时,使用activity组件时,必须添加一个默认的类别,f否则将无法Activity01。
启动Activity01
如果有多个组件被匹配成功,就会以对话框列表的方式让用户进行选择。
3.Data(数据) 表示与动作要操纵的数据
Data属性是Android要访问的数据,和action和Category声明方式相同,也是在<intent-filter>中。
Data是用一个uri对象来表示的,uri代表数据的地址,属于一种标识符。
第2行代码:指定了Intent的action是 Intent.ACTION_VIEW,表示查看的意思,这是一个Android系统内置的动作;
第3行代码:通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用intent的setData()方法将这个Uri对象传递进去。
此时调用的系统自带的浏览器,如下图所示:
![](https://img-blog.csdn.net/20160105185435685?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4.Category(类别) 用来表现动作的类别
每个Intent中只能指定一个action,但却能指定多个category;类别越多,动作越具体,意图越明确。通过添加category可以很好的解决因为相同的action而匹配多个组件的情况。
启动Activity01
5.Type(类型)
Intent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。
6.extras(扩展信息):扩展信息
是其它所有附加信息的集合。使用extras可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个
动作,可以将电子邮件的标题、正文等保存在extras里,传给电子邮件发送组件。
7、Flags(标志位):期望这个意图的运行模式
一个程序启动后系统会为这个程序分配一个task供其使用,另外同一个task里面可以拥有不同应用程序的activity。
一个意图是一个消息对象,你可以用来请求另一个应用程序组件的响应。意图主要是解决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。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories