“ android.intent.typey.DEFAULT”的用途是什么?

在意图过滤器的类别字段中使用 android.intent.category.DEFAULT的目的是什么?

62891 次浏览

它用于将某些操作声明为默认操作(顾名思义)。 让我们假设我们有一个记事本应用程序(参考 android 记事本样本)。应用程序的第一页包含所有记事本文件的列表。当选择一个记事本文件时,可以执行诸如编辑笔记、删除笔记等操作。但我想使编辑作为我的默认行动,这意味着当我按下我的键盘中心按钮,编辑窗口应打开。

这实际上是为了确保在应用程序运行时可以调用其他活动。LaUNCHER 将使拥有它的活动成为第一个开始的活动。要使用意图访问其他活动,必须通过使用 DEFAULT 将其列为“实际”活动。这是我所知道的,所以如果是错误的,不要引用我的话。

This category is mainly used for implicit intents. If your activity wishes to be started by an implicit intent it should include this catetory in its filter.

I think the term "default" should be understood as "default 候选人". If the action on a piece of data resolves to multiple activities, then Android will present all candidates to the user and the user can select his preferred default.

参考文献:

http://developer.android.com/guide/components/intents-filters.html

摘录如下:

Android 处理传递给 startActivity ()的所有隐式意图,就好像它们至少包含一个类别: “ Android.intent.CATEGORY y.DEFAULT”(CATEGORY _ DEFAULT 常量)。因此,愿意接收隐式意图的活动必须在其意图过滤器中包含“ android.intent.Category y.DEFAULT”。(带有“ android.intent.action.MAIN”和“ android.intent.Category y.LAUNCHER”设置的过滤器是例外。它们标记开始新任务并在启动器屏幕上显示的活动。它们可以在类别列表中包含“ android.intent.Category y.DEFAULT”,但不需要这样做。)

Categories are used for implicit Intents. So, If your Activity can be started by an implicit Intent when no other specific category is assigned to activity, activity's Intent filter should include this category. (even if you have other categories in the Intent filter). If you are sure that your activity 必须的 be called with any other Category, don't use the Default.

将类别设置为默认值并不意味着在应用程序启动时默认使用该活动。活动只是对系统说“ 哦,我可以开始,即使启动意图的类别被设置为 < em > Nothing !

活动将需要支持 CATEGORY _ DEFAULT,以便可以通过 Context.startActivity ()找到它们。

为了接收隐式意图,必须在意图筛选器中包含 CATEGORY _ DEFAULT 类别。方法 startActivity ()和 startActivityForResult ()对待所有意图就像它们声明 CATEGORY _ DEFAULT 类别一样。如果我们不在我们的意图过滤器中声明它,那么隐式意图将不会解析到我们的活动中。

类别:

android.intent.category.DEFAULT

匹配任何隐式意图。必须包含此类别,您的活动才能接收任何隐式意图。

Https://codelabs.developers.google.com/codelabs/android-training-activity-with-implicit-intent/index.html?index=..%2f..%2fandroid-training#6

Https://developer.android.com/guide/components/intents-filters

要接收隐式意图,必须在意图筛选器中包含 CATEGORY _ DEFAULT 类别。方法 startActivity ()和 startActivityForResult ()对待所有意图就像它们声明 CATEGORY _ DEFAULT 类别一样。如果未在意图筛选器中声明此类别,则不会解析任何隐式意图。

在活动接受隐式意图之前,意图必须通过类别测试: 意图中的每个类别必须与活动的意图过滤器中的完全相同的类别匹配。

类别 DEFAULT自动应用于所有隐式意图(默认情况下) ,因此,由于上述原因,每个想要接收任何隐式意图的活动都必须在其意图过滤器中包含这个类别。

来源