【Android】Intent 和 Intent Filter

article/2025/10/30 10:50:20

一.  Intent 简介

Intent 是一个消息传递对象,您可以用来从其他应用组件请求操作。可以用于:启动 Activity、启动服务、传递广播。

https://developer.android.com/guide/components/intents-filtershttps://developer.android.com/guide/components/intents-filters(1) Intent 启动 Activity 简介

// 主 Activity
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}// 启动一个Acitivitypublic void start1(View view) {// 创建一个 Intent 对象Intent intent = new Intent(this,MyActivity.class);// 传入 startActiviry() 启动名字为 MyActivity 的 ActivitystartActivity(intent);}
}

由 Android 指导文档(https://developer.android.com/reference/android/content/Intent)可知,Intent 的构造函数有下面这些类型。

上面示例代码用了 Intent(Context packageContext, Class<?> cls) 这个构造函数。

由于 Activity 是多层继承来自 Context 类,所以上面代码直接用 this(MainActivity对象的引用)来代替 Context 传入到参数1中。然后再使用要启动的目标 Activity 的类传入到参数2中。

由于 Activity 是继承来自 Context 类,startActivity() 也是由 Context 类继承而来,所以可以直接在 Activity 中调用 startActivity() 来启动一个 Activity。

(2) Intent 启动 Service 简介

// 主 Activity
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}// 启动一个Acitivitypublic void start1(View view) {// 创建一个 Intent 对象Intent intent = new Intent(this, MyService.class);// 传入 startService() 启动服务startService(intent);}
}

 启动 Serivce 跟启动 Activity 的方法类似,只是将在 Intent 传入 Serivce 的类,并调用 startService() 方法。

(3) Intent 发送广播简介

// 主 Activity
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}// 启动一个Acitivitypublic void start1(View view) {// 创建一个 Intent 对象Intent intent = new Intent(this, MyReceiver.class);// 发送广播sendBroadcast(intent);}
}

发送广播的方法也类似。

二.  Intent 分类

1.  显示 Intent

// 显式Intent
Intent intent = new Intent(this, MyActivity.class);
startActivity(intent);

2. 隐匿 Intent

// AndroidManifest.xml中
<activity android:name=".MyActivity"><intent-filter><action android:name="TEST1" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>
// MainActivity 中
static final String action1 = "TEST1";
Intent intent2 = new Intent(action1);
startActivity(intent2);

三.  Intent 解析

1. action 测试

当收到隐式 Intent 以启动 Activity 时,系统会根据以下三个方面将该 Intent 与 Intent 过滤器进行比较,搜索该 Intent 的最佳 Activity:操作、数据(URI 和数据类型)、类别。

隐式 Intent 要指定接受的 Intent action,Intent-filter 既可以不声明任何 <action> 元素,也可以声明多个此类元素。比如:

<activity android:name=".MyActivity"><intent-filter><action android:name="TEST1"/><action android:name="TEST2"/><category android:name="android.intent.category.DEFAULT"/></intent-filter>
</activity>

要通过此过滤器,在 Intent 中指定的 action 必须与过滤器中列出的某一 action 匹配。如果该过滤器未列出任何 action,则 Intent 没有任何匹配项,因此所有 Intent 均无法通过测试。但是,如果 Intent 未指定 action,则只要过滤器内包含至少一项操作,就可以通过测试。

2.  category 测试

要指定接受的 Intent 类别,Intent-filter 既可以不声明任何 <category> 元素,也可以声明多个此类元素,如下例所示:

<intent-filter><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" />...
</intent-filter>

若要使 Intent 通过 category 测试,则 Intent 中的每个 category  均必须与 filter 中的 category  匹配。Intent-filter 声明的 category  可以超出 Intent 中指定的数量,且 Intent 仍会通过测试。因此,不含 cateory 的 Intent 应当始终会通过此测试,无论 intent-filter 中声明何 category 别均是如此。

请注意:Android 会自动将 CATEGORY_DEFAULT  category 应用于传递给 startActivity() 和 startActivityForResult() 的所有隐式 Intent。如需 Activity 接收隐式 Intent,则必须将 "android.intent.category.DEFAULT"  包括在其 Intent-filter 中,不然隐式 Intent 将无法通过 category 测试找到此 Activity。

(未完待续)


http://chatgpt.dhexx.cn/article/7HpTadMW.shtml

相关文章

Android开发——IntentFilter的匹配规则

1. IntentFilter中的过滤信息 启动Activity分为显式调用和隐式调用&#xff0c;前者没什么好讲的&#xff0c;后者需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息。包括action、category、data。 一个Activity中可以有多个IntentFilter&#xff0c;一个Intent…

Android中的Intent和Intent-filter总结

一&#xff0e;相关概念 &#xff08;一&#xff09;基本概念 Intent中文意思指”意图”,按照Android的设计理念,Android使用Intent来封装程序的”调用意图”,不管启动Activity、Service、BroadcastReceiver,Android都使用统一的Intent对象来封装这一”启动意图”。此外,Inten…

【intent-filter】AndroidManifest中<intent-filter>标签的 部分作用

这里写自定义目录标题 AndroidManifest.xmlIntent-filter 标签Intent-filter 标签中的常用元素Intent-filter 标签的作用Intent对象Intent显式启动活动窗口Intent隐式启动&#xff08;重要&#xff09; AndroidManifest.xml AndroidManifest.xml是安卓开发中主配置文件&#x…

IntentFilter功能简介

1.什么是IntentFilter &#xff1f; IntentFilter翻译成中文就是“意图过滤器”&#xff0c;主要用来过滤隐式意图。当用户进行一项操作的时候&#xff0c;Android系统会根据配置的 “意图过滤器” 来寻找可以响应该操作的组件&#xff0c;服务。 例如&#xff1a;当用户点击…

简述 IntentFilter(意图过滤器)

转载自&#xff1a;http://www.cnblogs.com/ywtk/p/4158103.html 侵删 1.什么是IntentFilter &#xff1f; IntentFilter翻译成中文就是“意图过滤器”&#xff0c;主要用来过滤隐式意图。当用户进行一项操作的时候&#xff0c;Android系统会根据配置的 “意图过滤器” 来寻找可…

IntentFilter详解

IntentFilter的意思就是意图过滤器&#xff0c;当我们隐式的启动系统组件的时候&#xff0c;就会根据IntentFilter来筛选出合适的进行启动。 如果组件的 IntentFilter 与 Intent 中的 IntentFilter 正好匹配&#xff0c;系统就会启动该组件&#xff0c;并把 Intent 传递给它。如…

WPF MessageBox简单用法

1、弹出小框 用法&#xff1a; if (MessageBox.Show("内容", "标题", MessageBoxButton.YesNo, MessageBoxImage.Information) MessageBoxResult.Yes){label1.Content "yes";}else{label1.Content "no";} 2、例子 if (MessageBo…

C# winform 中MessageBox用法大全(附效果图)

我们在程序中经常会用到MessageBox。 MessageBox.Show()共有21中重载方法。现将其常见用法总结如下&#xff1a; 1.MessageBox.Show(“Hello~~~~”); 最简单的&#xff0c;只显示提示信息。 2.MessageBox.Show(“There are something wrong!”,“ERROR”); 可以给消息框加上…

MessageBox使用详解

Messagebox是我们编写程序时都会用到的东西&#xff0c;我每次使用的时候都能让它显示出来&#xff0c;但是我并不了解它的结构&#xff0c;或者说语法&#xff0c;下面简单总结一下。 语法 Messagebox(<字符串>text,<字符串>title&#xff0c;messageboxbuttons&a…

C#中Messagebox的简单使用

MessageBox的使用方法比较多&#xff0c;下面对常用的几种做了简单的说明&#xff0c;详细的资料可参考微软官方文档。 Messagebox.Show(String) 显示具有指定文本的消息框。 private void button1_Click(object sender, EventArgs e){//Show(String).显示具有指定文本的消息…

MessageBoxA 和MessageBoxW

文章目录 第一个参数&#xff1a;第二个参数&#xff1a;第三个参数&#xff1a;第四个参数&#xff1a;补充代码实现 MessageBoxA(NULL, text, title, MB_OK) 第一个参数&#xff1a; HWND hWnd 传入一个句柄&#xff0c;这个窗口句柄代表的窗口就是这个消息窗口的所有者&…

C#中MessageBox()用法详解

简介&#xff1a; MessageBox&#xff08;&#xff09;功能是显示一个消息对话框&#xff0c;其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息&#xff0c;如状态或错误的信息。 格式&#xff1a; MessageBox.Show&#xff08;string Text, string Caption,…

C/C++ MessageBox() 弹窗的用法

C/C MessageBox 的用法 目录 一、语法 二、头文件 三、常量 图标常量&#xff0c;按钮常量&#xff0c;返回值 四、示范 五、成品 六、通过返回值判断点击的按钮是什么 七、通过输入的文字来改变弹窗上的文字 一、语法 MessageBox(NULL,("对话框内容"),("对话…

MessageBox()函数用法及参数详解

MessageBox函数 显示模式对话框&#xff0c;其中包含系统图标&#xff0c;一组按钮和简要的特定于应用程序的消息&#xff0c;例如状态或错误信息。消息框返回一个整数值&#xff0c;指示用户单击的按钮。 语法 int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCapti…

MessageBox.Show 用法介绍

简介摘要&#xff1a;MessageBox.Show (String) 显示具有指定文本的消息框。 由 .NET Compact Framework 支持。 MessageBox.Show (IWin32Window, String) 在指定对象的前面显示具有指定文本的消息框。 MessageBox.Show (String) 显示具有指定文本的消息框。 由 .NET Compac…

C# MessageBox用法大全

C#中MessageBox用法大全&#xff08;附效果图&#xff09; 我们在程序中经常会用到MessageBox。 MessageBox.Show()共有21中重载方法。现将其常见用法总结如下&#xff1a; 1.MessageBox.Show("Hello~~~~"); 最简单的&#xff0c;只显示提示信息。 2.MessageBox.S…

MessageBox 用法详解与实例

摘自&#xff1a;教育网-自学之路&#xff1a;http://www.selfroad.com.cn/content.asp?id83 MessageBox这个函数可以在VC里面显示一个标准对话框&#xff0c;是比较常用的一个信息对话框&#xff0c;其不仅能够定义显示的信息内容、信息提示图标&#xff0c;而且可以定义按钮…

MessageBox()用法简介

MessageBox () 功能显示一个消息对话框。 语法 MessageBox (text,title{,icon{,button{,default}}}) 参数title&#xff1a;string类型&#xff0c;指定消息对话框的标题text&#xff1a;指定消息对话框中显示的消息&#xff0c;该参数可以是数值数据类型、字符串或boolean值…

C#中MessageBox用法大全(附效果图)

C#中MessageBox用法大全&#xff08;附效果图&#xff09; 我们在程序中经常会用到MessageBox。 MessageBox.Show()共有21中重载方法。现将其常见用法总结如下&#xff1a; 1.MessageBox.Show("Hello~~~~"); 最简单的&#xff0c;只显示提示信息。 2.MessageBox.S…

C语言基础进阶之 MessageBox()用法简介

MessageBox () 功能显示一个消息对话框。 语法 MessageBox (text,title{,icon{,button{,default }}}) 参数title&#xff1a;string类型&#xff0c;指定消息对话框的标题text&#xff1a;指定消息对话框中显示的消息&#xff0c;该参数可以是数值数据类型、字符串或boolea…