Intent是Android中的一种机制,用于在应用程序之间传递数据和控制行为。它可以用于Activity、Service和BroadcastReceiver之间的交互。Intent起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

Intent可以用来激活组件;携带信息。在SDK中给出了Intent作用的表现形式为:通过Context.startActivity() orActivity.startActivityForResult() 启动一个Activity; 通过 Context.startService() 启动一个服务,或者通过Context.bindService() 和后台服务交互; Context.sendBroadcast(),Context.sendOrderedBroadcast(), Context.sendStickyBroadcast()) 发给broadcast receivers。

Activity的跳转需要创建Intent对象,通过设置intent对象的参数指定要跳转Activity。Activity跳转一共有两类:一类为显式意图;一类为隐式意图。通过设置Activity的包名和类名实现跳转,称为显式意图;通过指定动作实现跳转,称为隐式意图。

```java

跳转至同一应用下的另一个Activity,直接指定该Activity的字节码即可

/**

* 跳转至SecondActivity

* 在本应用中跳转

*/

// 显示跳转:直接指定目标Activity的包名和类名

public void click1(View v){

// 这个是显式意图

Intent intent = new Intent();

// 设置上下文和目标Activity的字节码

intent.setClass(this, SecondActivity.class);

startActivity(intent);

}

/**

* 显式启动拨号器

*/

public void click2(View v){

Intent intent = new Intent();

// arg0:目标Activity所在的应用的包名

// arg1:目标Activity的类名,注意要带上包名

intent.setClassName("com.android.dialer", "com.android.dialer.DialtactsActivity");

intent.setData(Uri.parse("tel:10086"));

startActivity(intent);

}

```

这段代码是一个隐式意图跳转至指定SecondActivity的方法。其中,intent-filter用于匹配动作、数据和类别,而startActivity()方法则用于启动Activity。

具体来说,intent-filter中的action属性指定了动作类型,可以自定义或使用系统自带的动作;data属性指定了操作的数据内容,操作数据的前缀必须是example;category属性为某一种类定义,一般使用默认类别即可。

在click3()方法中,通过创建Intent对象并设置相应的属性来实现隐式意图跳转至指定SecondActivity。最后调用startActivity()方法启动Activity即可。

隐式意图跳转至指定系统中的Activity示例1:隐式跳转至打电话Activity

```java

/**

* 隐式跳转至打电话Activity

*/

public void click4(View v) {

//创建意图,这个是隐式意图

Intent intent = new Intent();

//设置动作

intent.setAction(Intent.ACTION_CALL);

intent.setData(Uri.parse("tel:110"));

//启动Activity

startActivity(intent);

}

```

电话源码中的filter示例2:跳转拨号器界面

```java

/**

* 隐式启动拨号器

*/

public void click3(View v) {

Intent intent = new Intent();

intent.setAction(Intent.ACTION_DIAL);

intent.setData(Uri.parse("tel:76115230"));

startActivity(intent);

}

```

在清单文件中定义data的时候,添加了android:mimeType的操作示例:

```xml

android:name="com.example.TwoActivity">

```

您可以使用setType()方法来指定MIME类型。setType()方法的参数是一个字符串,表示MIME类型。例如,如果您想要将一个文件作为文本文件打开,您可以使用以下代码:

```java

intent.setType("text/plain");

startActivity(intent);

```

但是,setType()方法不能与setData()方法共存。因此,如果您想要同时指定MIME类型和数据,请使用setDataAndType()方法。setDataAndType()方法的两个参数都是Uri对象。例如,如果您想要将一个文件作为文本文件打开,并将其数据设置为该文件的内容,您可以使用以下代码:

```java

intent.setDataAndType(Uri.fromFile(new File("example.txt")), "text/plain");

startActivity(intent);

```

启动同一应用中的Activity,通常采用显式启动方式。当需要激活应用内的某个Activity时,通过Intent对象指定该Activity的类名,并调用startActivity()方法来实现。这种方式的优点是明确指定了要启动的Activity,启动效率高。

启动不同应用中的Activity,通常采用隐式启动方式。当需要从一个应用中启动另一个应用的Activity时,通过Intent对象设置action、data等属性,让系统根据这些属性自动匹配合适的Activity。如果系统找到了多个intent-filter与程序员创建的intent匹配,那么就会弹出对话框,列举所有匹配的Activity,让用户选择。比如:在手机上安装多个浏览器的情况下,用户可以通过点击浏览器图标直接进入对应的浏览器界面。