“ android.intent.category.DEFAULT”的目的是什么?


103

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


2
俗话说,这是应用程序的默认入口点。请参阅:developer.android.com/reference/android/content/…–
Blundell

@Blundell:因此,如果隐式意图到达,则将调用在意图过滤器中具有默认类别的活动?
Pravy

1
我相信它是用来暗示这是使用yes的活动“它用于软件包中指定的意图过滤器”
Blundell

如果一个以上活动包含默认活动作为其类别,则在其各自的意图过滤器中将调用哪个活动?
Pravy

如果它们具有不同的意图过滤器,则取决于意图。
Blundell

Answers:


112

类别用于隐式Intent。因此,如果在没有其他特定类别分配给活动时可以通过隐式Intent启动您的Activity,则活动的Intent过滤器应包括该类别。(即使“意图”过滤器中还有其他类别)。如果您确定必须用任何其他类别调用您的活动,请不要使用默认值。

将类别设置为默认并不意味着在您的应用启动时默认使用此活动。该活动仅对系统说:“ 哦,即使启动者意图的类别设置为“ 一无所有,我也可以启动


27
这实际上是一个可以理解的解释。将此答案与文档进行比较:“设置该活动是否应作为对某条数据执行的默认操作(中央按)的选项。设置此设置将向用户隐藏任何未对某些数据执行操作时设置的活动。数据”来写一个容易理解的描述有多难……
Andreas

我不确定它的任务授权,因为它似乎是可选的,因为没有任何意图过滤器的活动仍可以称为隐式活动
humblerookie 2014年

6
现在,IMO的文档更加清晰了:Android自动将CATEGORY_DEFAULT类别应用于传递给startActivity()和startActivityForResult()的所有隐式意图。因此,如果您希望活动接收隐式意图,则它的意图过滤器中必须包含“ android.intent.category.DEFAULT”的类别。
shkschneider

2
@humblerookie。我已经尝试过了,没有DEFAULT类别它就无法工作。如果您不相信我会自我测试。
Bob Ueland

2
如果只有所有教程都是以此方式编写的。为什么我们在2018年仍然使用木制语言?
SudoPlz

24

该类别主要用于隐式意图。如果您的活动希望以隐式意图开始,则应将此类别包含在其过滤器中。

我认为应将“默认”一词理解为“默认候选 ”。如果对一条数据的操作分解为多个活动,则Android将向用户显示所有候选者,并且用户可以选择其首选默认值。

参考:

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

从该页面中提取:

Android将传递给startActivity()的所有隐式意图视为包含至少一个类别:“ android.intent.category.DEFAULT”(CATEGORY_DEFAULT常量)。因此,愿意接收隐式意图的活动必须在其意图过滤器中包含“ android.intent.category.DEFAULT”。(具有“ android.intent.action.MAIN”和“ android.intent.category.LAUNCHER”设置的过滤器是例外。它们标记开始新任务并在启动器屏幕上显示的活动。它们可以包括“ android.intent .category.DEFAULT”,但不需要。)


@Comptrol,您的答案不再在下面。它正在上升。:-)
Ellen Spertus

是的,但我将其恢复到原来的状态。因此,总体而言,我完全没有改变任何事情。
Özgür的

1
我发现此答案对于了解当前情况的意图过滤器更有用。谢谢。
霓虹灯Warge

1

实际上是确保在应用运行时可以调出其他活动。启动器将拥有它的活动作为第一个开始的活动。要使用意图进行其他活动,必须通过放置DEFAULT将其列为“实际”活动。据我所知,如果有误,请不要引用我。


3
您应努力为您的主张提供参考。“如果错误,请不要引用我”不允许您覆盖此规则。
verybadalloc

我的参考资料是我研究Android编码时从事的项目。如果您需要源文件,我将很乐意发送它们。
CHT

1

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

为了接收隐式意图,您必须在意图过滤器中包括CATEGORY_DEFAULT类别。方法startActivity()和startActivityForResult()将所有意图视为已声明CATEGORY_DEFAULT类别。如果我们不在意图过滤器中声明它,则任何隐式意图都不会解析为我们的活动。


0

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


1
如果您查看Android记事本示例,则所有活动均被标记为默认活动:developer.android.com/reference/android/content/Intent.html
Peter Ajtai 2012年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.