深入理解 Android Intent:Action 与 Category 详解

news/2025/4/1 0:56:12/

在 Android 开发中,Intent 是组件之间通信的核心机制,其中 Action(动作)和 Category(类别)决定了 Intent 的用途和目标。在本文中,我们将详细解析常见的 Action 和 Category 及其应用场景,并深入探讨它们在 Android 源码中的实现。

1. Intent Action 和 Category 解析

androidintentactionMAIN_3">1.1 android.intent.action.MAIN

  • 作用:表示应用的主入口,用于指定应用的主要启动 Activity
  • 示例代码
    <activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
    </activity>
    
  • 应用场景
    • 作为应用的启动 Activity,通常配合 android.intent.category.LAUNCHER 使用,使其能出现在桌面应用列表中。

androidintentactionVIEW_17">1.2 android.intent.action.VIEW

  • 作用:用于显示某个数据给用户,例如打开网页、查看联系人等。
  • 示例代码
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(Uri.parse("https://www.google.com"));
    startActivity(intent);
    
  • 应用场景
    • 打开网页 (http://https://)
    • 查看联系人 (content://contacts/people/1)
    • 播放媒体 (file://sdcard/video.mp4)

androidintentcategoryHOME_30">1.3 android.intent.category.HOME

  • 作用:表示该 Activity 可以作为主屏幕(桌面)。
  • 示例代码
    <activity android:name=".MyHomeActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.HOME" /></intent-filter>
    </activity>
    
  • 应用场景
    • 创建一个自定义 Launcher(桌面应用)。

androidintentcategoryLAUNCHER_44">1.4 android.intent.category.LAUNCHER

  • 作用:使应用出现在 Launcher(桌面)的应用列表中。
  • 示例代码
    <activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
    </activity>
    
  • 应用场景
    • 只有带有 LAUNCHERActivity 才能出现在应用抽屉(桌面启动器)里。

2. 其他常见的 Action 和 Category

2.1 常见 Action

Action作用
android.intent.action.SEND共享文本/图片
android.intent.action.DIAL打开拨号界面
android.intent.action.CALL直接拨打电话(需权限)
android.intent.action.PICK选择联系人/照片等
android.intent.action.EDIT编辑指定的数据
android.intent.action.DELETE删除某个数据
android.intent.action.BOOT_COMPLETED设备启动完成(需要权限)

2.2 常见 Category

Category作用
android.intent.category.DEFAULT作为默认处理方式
android.intent.category.BROWSABLE允许 WebView 访问
android.intent.category.ALTERNATIVE作为某种操作的可选方式
android.intent.category.INFO只显示应用信息
android.intent.category.PREFERENCE用于 Preference 相关的 Activity

3. 这些属性属于安卓哪个知识点?何时用到?

这些 Intent 相关的属性属于 Android 四大组件ActivityServiceBroadcastReceiverContentProvider)中的 Activity 启动管理

3.1 使用场景

  1. 启动 Activity(使用 Intent.ACTION_VIEW
  2. AndroidManifest.xml 中声明主 Activity(使用 MAIN + LAUNCHER
  3. 注册广播接收器(如 BOOT_COMPLETED 监听开机广播)
  4. 隐式 Intent 处理系统行为(如 ACTION_DIAL 打开拨号界面)

4. 这些 Action 和 Category 的源代码在哪?

4.1 Framework 层

这些 Intent Action 和 Category 的常量定义在 Android 源码中的 Intent.java 文件里:

  • 路径frameworks/base/core/java/android/content/Intent.java
  • 示例代码
    public static final String ACTION_MAIN = "android.intent.action.MAIN";
    public static final String ACTION_VIEW = "android.intent.action.VIEW";
    public static final String CATEGORY_HOME = "android.intent.category.HOME";
    public static final String CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER";
    

4.2 System Server 层

  • 处理 Intent 分发的代码
    • 路径frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
    • Activity 启动过程
      1. startActivity() -> ActivityStarter 解析 Intent
      2. ActivityTaskManagerService 处理 Task 栈
      3. ActivityThread 负责最终启动 Activity

5. 总结

  • Action:定义 Intent 的具体操作,如 MAIN(主入口)、VIEW(查看数据)。
  • Category:定义 Intent 的行为范围,如 HOME(桌面)、LAUNCHER(应用列表)。
  • 使用场景
    • 启动 Activity
    • 处理系统行为
    • 隐式 Intent 分发
  • 源码位置
    • Intent.java(定义常量)
    • ActivityManagerService.java(处理 Intent 分发)

这些属性在 Android 应用开发中广泛使用,尤其是涉及 Activity 启动、隐式 Intent 处理、广播监听 时经常用到。希望本文能帮助你更好地理解 Intent 机制!


http://www.ppmy.cn/news/1584093.html

相关文章

RabbitMQ三种队列深度解析:区别、场景与未来趋势

嗯&#xff0c;用户让我分析RabbitMQ三种队列的区别、应用场景、技术原理和未来趋势&#xff0c;还要写一篇三千字的文章。首先&#xff0c;我需要回顾一下搜索结果&#xff0c;看看有哪些资料可用。 根据搜索结果&#xff0c;RabbitMQ的三种队列是经典队列&#xff08;Classi…

使用独立服务器的最佳方式指南

在寻找合适的主机服务方案时&#xff0c;可以考虑独立服务器&#xff0c;因为它拥有管理员权限以及更高的性能配置。在本指南中&#xff0c;我们将介绍独立服务器的多种用途&#xff0c;并分析为什么选择独立服务器可能是处理高性能、资源密集型应用和大流量网站的最佳方案。 搭…

VMware Windows Tools 存在认证绕过漏洞(CVE-2025-22230)

漏洞概述 博通公司&#xff08;Broadcom&#xff09;近日修复了 VMware Windows Tools 中存在的一个高危认证绕过漏洞&#xff0c;该漏洞编号为 CVE-2025-22230&#xff08;CVSS 评分为 9.8&#xff09;。VMware Windows Tools 是一套实用程序套件&#xff0c;可提升运行在 VM…

深度解读 AWS IAM:身份访问管理与安全的核心纽带

导语 在 AWS&#xff08;亚马逊云服务&#xff09;的生态体系中&#xff0c;AWS IAM&#xff08;Identity and Access Management&#xff09;犹如坚固的堡垒&#xff0c;守护着用户在云端的各类资源。它不仅是管理用户身份与访问权限的关键工具&#xff0c;更是维系 AWS 安全…

Problem A: 计算奇数和

补充&#xff08;牢骚&#xff09;&#xff1a; 必须要 Main 类&#xff0c;自己自定义的类不能跑&#xff0c;说实话我被恶心到了&#xff0c;真没力扣好用。后面都默认为Main 类。真恶心&#xff0c;其实不止这一点。。。 1.题目问题 2.输入 3.输出 4.样例 5.代码实现 imp…

【机器学习基础 4】 Pandas库

一、Pandas库简介 Pandas 是一个开源的 Python 数据分析库&#xff0c;主要用于数据清洗、处理、探索与分析。其核心数据结构是 Series&#xff08;一维数据&#xff09;和 DataFrame&#xff08;二维表格数据&#xff09;&#xff0c;可以让我们高效地操作结构化数据。Pandas …

【Apache Hive】

一、Hive简介 官网&#xff1a;https://hive.apache.org 1、Hive是什么&#xff1f; Apache Hive 是一款建立在Hadoop之上的开源数据仓库系统&#xff0c;可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表&#xff0c;基于表提供了一种类似SQL的查询模型…

Node.js 模块加载机制--详解

目录 Node.js 模块加载机制详解 1. 什么是模块&#xff1f; 2. 模块加载顺序 3. 核心模块加载 4. 自定义模块加载 5. 目录作为模块&#xff08;index.js&#xff09; 6. require.resolve() 查找模块路径 7. module 对象解析 8. require.cache 机制&#xff08;避免重复…