在 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>
- 应用场景:
- 只有带有
LAUNCHER
的Activity
才能出现在应用抽屉(桌面启动器)里。
- 只有带有
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 四大组件(Activity
、Service
、BroadcastReceiver
、ContentProvider
)中的 Activity 启动管理。
3.1 使用场景
- 启动 Activity(使用
Intent.ACTION_VIEW
) - 在
AndroidManifest.xml
中声明主 Activity(使用MAIN + LAUNCHER
) - 注册广播接收器(如
BOOT_COMPLETED
监听开机广播) - 隐式 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 启动过程:
startActivity()
->ActivityStarter
解析Intent
ActivityTaskManagerService
处理 Task 栈ActivityThread
负责最终启动Activity
- 路径:
5. 总结
- Action:定义
Intent
的具体操作,如MAIN
(主入口)、VIEW
(查看数据)。 - Category:定义
Intent
的行为范围,如HOME
(桌面)、LAUNCHER
(应用列表)。 - 使用场景:
- 启动
Activity
- 处理系统行为
- 隐式
Intent
分发
- 启动
- 源码位置:
Intent.java
(定义常量)ActivityManagerService.java
(处理 Intent 分发)
这些属性在 Android 应用开发中广泛使用,尤其是涉及 Activity 启动、隐式 Intent 处理、广播监听 时经常用到。希望本文能帮助你更好地理解 Intent
机制!