Android中的Intent

本文详细介绍了Android系统中的Intent机制,包括Intent的两种类型(显示Intent和隐式Intent)、构建Intent的方法及Intent包含的五个主要组成部分(组件名称、操作、Extra、类别和标志)。此外,还提供了多个Intent使用的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:
(1)启动 Activity
(2)启动服务
(3)传递广播

本文将从Intent类型,构建Intent,包括Intent的五个部分来讲解Intent。

一、Intent的类型
(1)显示Intent
按名称(完全限定类名)指定要启动的组件。 通常,您会在自己的应用中使用显式 Intent 来启动组件,这是因为您知道要启动的 Activity 或服务的类名
(2)隐式Intent
隐式 Intent :不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它。 例如,如需在地图上向用户显示位置,则可以使用隐式 Intent,请求另一具有此功能的应用在地图上显示指定的位置。

二、构建Intent
Intent 对象携带了 Android 系统用来确定要启动哪个组件的信息(例如,准确的组件名称或应当接收该 Intent 的组件类别),以及收件人组件为了正确执行操作而使用的信息(例如,要采取的操作以及要处理的数据)。

Intent 中包含的主要信息如下:
(1)组件名称
这里写图片描述

Intent intent = new Intent();
intent.setClass(ActivityA.this, ActivityB.class);
 Intent intent = new Intent();
intent.setClassName(ActivityA.this, ActivityB.class.getName());
Intent intent = new Intent();
intent.setComponent(new ComponentName(ActivityA.this, ActivityB.class));

注:启动 Service 时,您应始终指定组件名称。 否则,您无法确定哪项服务会响应 Intent,且用户无法看到哪项服务已启动。

(2)操作
引用待操作数据和/或该数据 MIME 类型的 URI(Uri 对象)。提供的数据类型通常由 Intent 的操作决定。例如,如果操作是 ACTION_EDIT,则数据应包含待编辑文档的 URI。
注意:若要同时设置 URI 和 MIME 类型,请勿调用 setData() 和 setType(),因为它们会互相抵消彼此的值。请始终使用 setDataAndType() 同时设置 URI 和 MIME 类型。

原理图:
这里写图片描述

例子(分享内容):

 Intent intent = new Intent();
 intent.setAction(Intent.ACTION_SEND);
 intent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
 intent.setType("text/plain");
 startActivity(intent);

例子(打电话)

  Intent intent = new Intent();
  intent.setAction(Intent.ACTION_DIAL);
  intent.addCategory(Intent.CATEGORY_DEFAULT);
  startActivity(intent);

常用的Action
这里写图片描述

设置待操作的数据URI或者数据的MIME类型

setData()
setType()
setDataAndType()
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);        intent.setData(Uri.parse("tel:1320010001"));
startActivity(intent);

常用Data
这里写图片描述

注:若要同时设置 URI 和 MIME 类型,请勿调用 setData() 和 setType(),因为它们会互相抵消彼此的值。请始终使用 setDataAndType() 同时设置 URI 和 MIME 类型。

(3)Extra

这里写图片描述

  Intent intent = new Intent(ActivityA.this, ActivityB.class);
  intent.putExtra("Message", "This message from Activity A!");
  startActivity(intent);
 Intent intent = getIntent();
 String msg = intent.getStringExtra("Message");

(4)类别
一个包含应处理 Intent 组件类型的附加信息的字符串。 您可以将任意数量的类别描述放入一个 Intent 中,但大多数 Intent 均不需要类别。 以下是一些常见类别:
CATEGORY_BROWSABLE
目标 Activity 允许本身通过网络浏览器启动,以显示链接引用的数据,如图像或电子邮件。
CATEGORY_LAUNCHER
该 Activity 是任务的初始 Activity,在系统的应用启动器中列出。

您可以使用 addCategory() 指定类别。

Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);        intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);
 <activity android:name=".ActivityA">
    <intent-filter>
       <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
  </activity>

(5)标志
在 Intent 类中定义的、充当 Intent 元数据的标志。 标志可以指示 Android 系统如何启动 Activity(例如,Activity 应属于哪个任务),以及启动之后如何处理(例如,它是否属于最近的 Activity 列表)。

这里写图片描述

 Intent intent = new Intent();
 intent.setClass(this, ActivityC.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(intent);

清除上层的Activity

Intent intent = new Intent();
intent.setClass(this, ActivityC.class);         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

全部Flag的地址:
https://developer.android.com/reference/android/content/Intent.html#setFlags(int)

Intent Filter

<activity android:name="ShareActivity">
    <!-- This activity handles "SEND" actions with text data -->
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
    <!-- This activity also handles "SEND" and "SEND_MULTIPLE" with media data -->
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <action android:name="android.intent.action.SEND_MULTIPLE"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="application/vnd.google.panorama360+jpg"/>
        <data android:mimeType="image/*"/>
        <data android:mimeType="video/*"/>
    </intent-filter>
</activity>

这里写图片描述

Intent官方文档:
https://developer.android.com/reference/android/content/Intent.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值