返回

Android点将台:外交官[-Intent-]

Android







## Android点将台:外交官[-Intent-]

大家好,我是Android点将台的主持人小金。今天,我们来聊一聊Android开发中的外交官——Intent。Intent在Android系统中扮演着非常重要的角色,它就像一位外交官,在不同的组件之间传递信息和指令。今天,我们就来详细了解一下Intent。

## 零、前言
在开始之前,我们先来了解一下Intent的相关知识点。

* Intent是一个用来在组件之间传递信息和指令的载体。
* Intent可以用于启动Activity、启动Service、发送广播等操作。
* Intent可以显式指定要启动的组件,也可以隐式指定要启动的组件。

## 一、Intent类简单认识
### 1. Intent构造函数
Intent有三个构造函数:

* Intent():创建一个空的Intent。
* Intent(Context packageContext, Class<?> cls):创建一个显式Intent,指定要启动的组件。
* Intent(String action):创建一个隐式Intent,指定要执行的动作。

### 2. Intent中的常用成员变量
Intent类中有一些常用的成员变量,比如:

* Intent.ACTION_VIEW:表示要查看某个内容的Intent。
* Intent.ACTION_SEND:表示要发送某个内容的Intent。
* Intent.ACTION_MAIN:表示要启动一个Activity的Intent。
* Intent.EXTRA_TEXT:表示要传递的文本内容。
* Intent.EXTRA_HTML_TEXT:表示要传递的HTML文本内容。

## 二、Intent的隐式使用
### 1. 仅匹配Action
Intent可以隐式指定要启动的组件,只需要指定要执行的动作即可。例如,我们可以使用以下代码来启动一个可以查看图片的Activity:

```java
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file:///storage/emulated/0/Pictures/image.jpg"), "image/*");
startActivity(intent);

2. 匹配Action和Category

除了匹配Action之外,Intent还可以匹配Category。Category表示组件的类别,例如,Activity、Service、Receiver等。我们可以使用以下代码来启动一个可以查看图片的Activity,并指定它的类别:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file:///storage/emulated/0/Pictures/image.jpg"), "image/*");
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);

3. 匹配Action、Category和Data

Intent还可以匹配Data,Data表示要操作的数据。我们可以使用以下代码来启动一个可以查看图片的Activity,并指定它的类别和数据:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("file:///storage/emulated/0/Pictures/image.jpg"), "image/*");
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);

三、Intent的显式使用

1. 显式指定要启动的组件

Intent可以显式指定要启动的组件,只需要指定组件的包名和类名即可。例如,我们可以使用以下代码来启动一个名为MainActivity的Activity:

Intent intent = new Intent();
intent.setComponent(new ComponentName("com.example.myapp", "com.example.myapp.MainActivity"));
startActivity(intent);

2. 传递数据

Intent可以传递数据,只需要使用putExtra()方法即可。例如,我们可以使用以下代码来传递一个字符串:

Intent intent = new Intent();
intent.putExtra("name", "小明");
startActivity(intent);

3. 获取数据

在接收方,我们可以使用getIntent()方法获取Intent对象,然后使用getStringExtra()方法获取传递过来的数据。例如,我们可以使用以下代码来获取传递过来的字符串:

Intent intent = getIntent();
String name = intent.getStringExtra("name");

四、Intent的过滤器

Intent过滤器用于匹配Intent,当Intent与过滤器匹配时,系统就会启动相应的组件。Intent过滤器可以指定Action、Category、Data等属性。

五、Intent的启动模式

Intent的启动模式决定了组件的启动方式。有四种启动模式:

  • standard:标准模式,每次启动组件都会创建一个新的实例。
  • singleTop:单例模式,如果组件已经存在,则不会创建新的实例,而是将Intent传递给已存在的实例。
  • singleTask:单任务模式,如果组件已经存在,则不会创建新的实例,而是将Intent传递给已存在的实例,同时销毁该实例之前的所有实例。
  • singleInstance:单实例模式,无论组件是否已经存在,都会创建一个新的实例。

六、结语

Intent是Android开发中非常重要的一个概念,它就像一位外交官,在不同的组件之间传递信息和指令。掌握了Intent的使用方法,可以帮助我们开发出更加灵活和强大的应用。