Android android.intent.category解析

本文详细解析了Android中隐式Intent的工作原理,强调了接收隐式Intent的Activity必须包含DEFAULT类别。此外,还介绍了Intent匹配机制及特殊情况。

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

1、要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent。

Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码:
Intent intent= new Intent(this, B.class)

Implicit Intent没有明确的指定要启动哪个Activity ,而是通过设置一些Intent Filter来让系统去筛选合适的Acitivity去启动。

2、intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data。

理论上来说,如果intent不指定category,那么无论intent filter的内容是什么都应该是匹配的。但是,如果是implicit intent,Android默 认给加上一个CATEGORY_DEFAULT,这样的话如果intent filter中没有android.intent.category.DEFAULT这个category的话,匹配测试就会失败。所以,如果你的 activity支持接收implicit intent的话就一定要在intent filter中加入android.intent.category.DEFAULT。

例外情况是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中没有必要加入android.intent.category.DEFAULT,当然加入也没有问题。

我们定义的activity如果接受implicit intent的话,intent filer就一定要加上android.intent.category.DEFAULT这个category。

 


来自另一篇文章的解释:

在写 AndroidManifest.xml 的时候,一直没有搞明白,什么时候要给 Activityandroid.intent.category.DEFAULT 过滤器,现在才明白。

--------------------------------------------------------------------------------
Android treats all implicit intents passed to startActivity() as if they contained at least one category: "android.intent.category.DEFAULT" (the CATEGORY_DEFAULT constant). Therefore, activities that are willing to receive implicit intents must include "android.intent.category.DEFAULT" in their intent filters
--------------------------------------------------------------------------------

意 思是说,每一个通过 startActivity() 方法发出的隐式 Intent 都至少有一个 category,就是 "android.intent.category.DEFAULT",所以只要是想接收一个隐式 Intent 的 Activity 都应该包括 "android.intent.category.DEFAULT" category,不然将导致 Intent 匹配失败。

从上面的论述还可以获得以下信息:
1、一个 Intent 可以有多个 category,但至少会有一个,也是默认的一个 category。
2、只有 Intent 的所有 category 都匹配上,Activity 才会接收这个 Intent。

### 实现 Vue3 + Vite + Ant Design 日历组件全中文显示 为了确保日历组件能够完全以中文显示,在 `Vue3` 和 `Vite` 的环境中集成 `Ant Design` 需要遵循特定的设置方法。 #### 1. 安装依赖包 确保安装了必要的依赖项,包括 `ant-design-vue` 及其本地化支持文件。这可以通过 npm 或 yarn 来完成: ```bash npm install ant-design-vue dayjs@latest ``` 或者使用 Yarn: ```bash yarn add ant-design-vue dayjs@latest ``` #### 2. 主应用入口配置 (`main.js`) 在项目的主应用程序入口处注册 `Ant Design Vue` 组件库,并加载样式表。此操作使得整个项目可以访问到这些 UI 组件及其默认样式[^2]。 ```javascript import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import Antd from &#39;ant-design-vue&#39;; import &#39;ant-design-vue/dist/antd.css&#39;; const app = createApp(App); app.use(Antd); // 挂载根实例 app.mount(&#39;#app&#39;); ``` #### 3. 使用 `<AConfigProvider>` 进行全局配置 为了让所有的日期时间控件都能识别中文环境,可以在顶层包裹一层 `<a-config-provider>` 并传入相应的语言包对象 `zhCN`[^3]。 ```html <template> <a-config-provider :locale="zhCN"> <!-- 路由视图或其他内容 --> <router-view></router-view> </a-config-provider> </template> <script> import zhCN from &#39;ant-design-vue/es/locale/zh_CN&#39;; export default { data() { return { zhCN, }; }, }; </script> ``` #### 4. 设置单个组件的语言属性 对于具体的日期选择器或日历组件来说,则需单独指定它们所使用的地区信息以及初始化状态值。这里展示了如何通过传递 `:locale` 属性来控制日历界面的文字呈现方式[^1]。 ```html <template> <div class="calendar-container"> <a-calendar v-model:value="value" :locale="locale" @panelChange="onPanelChange"></a-calendar> </div> </template> <script setup> import { ref } from &#39;vue&#39;; import locale from &#39;ant-design-vue/es/date-picker/locale/zh_CN&#39;; import dayjs from &#39;dayjs&#39;; import &#39;dayjs/locale/zh-cn&#39;; // 加载中文语言包 dayjs.locale(&#39;zh-cn&#39;); // 应用中文语言环境 const value = ref(dayjs()); const onPanelChange = (value, mode) => { console.log(value.format(), mode); }; </script> ``` 以上步骤完成后,应该能够在基于 `Vue3`, `Vite` 构建的应用程序里看到带有完整中文标签的日历插件正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值