什么是Intent? 转
一、Intent 作用
Intent
是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成Android各个组件之间的通讯。比如说调用
startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的
BroadcaseReceiver,
再或者由startService()/bindservice()来启动一个后台的service.所以可以看出来,intent主要是用来启动其他的
activity 或者service,所以可以将intent理解成activity之间的粘合剂。
要在不同的activity之间传递数据,就要在intent中包含相应的东西,一般来说数据中最基本的应该包括:action、data/type、
category和extras,它们一起形成了一种语言,这种语言可以表达出诸如“给张三打电话”之类的短语组合。
对于明确指出了目标组件名称的Intent,我们称之为“显式Intent”。对于没有明确指出目标组件名称的Intent,则称之为“隐式
Intent”。Android系统使用IntentFilter
来寻找与隐式Intent相关的对象。显式Intent直接用组件的名称定义目标组件,这种方式很直接。但是由于开发人员往往并不清楚别的应用程序的组件
名称,因此,显式Intent更
多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。隐式Intent恰恰相反,它不会用组件名称定义需要
激活的目标组件,它更广泛地用于在不同应用程序之间传递消息。
二、Intent的构造函数
公共构造函数:
1、Intent() 空构造函数
2、Intent(Intent o) 拷贝构造函数
3、Intent(String action) 指定action类型的构造函数
4、Intent(String action, Uri uri) 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvider
5、Intent(Context packageContext, Class<?> cls) 传入组件的构造函数,也就是上文提到的
6、Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前两种结合体
Intent有六种构造函数,3、4、5是最常用的,并不是其他没用!
Intent(String action, Uri uri) 的action就是对应在AndroidMainfest.xml中的action节点的name属性值。在Intent类中定义了很多的Action和Category常量。
示例代码:
1: Intent intent = new Intent(Intent.ACTION_EDIT, null);
2: startActivity(intent);
示
例代码是用了第四种构造函数,只是uri参数为null。执行此代码的时候,系统就会在程序主配置文件AndroidMainfest.xml中寻
找<action android:name="android.intent.action.EDIT"
/>对应的Activity,如果对应为多个activity具有<action
android:name="android.intent.action.EDIT" />此时就会弹出一个dailog选择Activity。
三、实例
![什么是Intent? - 18989792 - 刘盛瀚](http://img5.ph.126.net/iTxZ-0GTzIHyS2RKl90RJw==/2621939408076809835.png)
HelloWorldActivity.java 中的通过startActivity(intent)告诉Android启动新的Activity,但在AndroidManifest.xml(代码如 下)中的intent-filter却匹配不到intent,但并没有报错,因为HelloWorldActivity.java是Activity类的 子类,intent可以和Activity的intent-filter匹配,则直接调用Activity自身了。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="john.android.test.hello"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="7" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="常联系"
android:name=".HelloWorldActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>