"android.intent.category.DEFAULT"的目的是什么?

Pra*_*avy 102 android intentfilter

android.intent.category.DEFAULT在Intent Filters的Category字段中使用的目的是什么?

Özg*_*gür 107

类别用于隐式Intents.因此,如果您的Activity可能在没有为其分配特定类别时由隐式Intent启动,则其Intent过滤器应包含此类别.(即使您在Intent过滤器中有其他类别).如果您确定必须使用任何其他类别调用您的活动,请不要使用默认值.

将"类别"设置为"默认"并不意味着在应用启动时默认情况下将使用此"活动".活动只是告诉系统" 哦,我可以开始,即使起始者Intent的类别设置为Nothing! "

  • 这实际上是一个可以理解的解释.将此答案与文档进行比较:"设置活动是否应该是默认操作(中心按下)的选项,以对一段数据执行.设置此项将隐藏用户在执行某些操作时未设置的任何活动数据"写一个易于理解的描述有多难... (24认同)
  • 文档现在更加清晰IMO:*Android自动将CATEGORY_DEFAULT类别应用于传递给startActivity()和startActivityForResult()的所有隐式意图.因此,如果您希望您的活动接收隐式意图,则必须在其意图过滤器中包含"android.intent.category.DEFAULT"类别.* (6认同)
  • @humblerookie.我已经尝试过了,如果没有DEFAULT类别它就无法运行.如果你不相信我自己测试. (2认同)
  • 如果只有所有教程都是以此方式编写的。为什么我们在2018年仍然使用木制语言? (2认同)

Bru*_*ert 24

此类别主要用于隐式意图.如果您的活动希望通过隐式意图启动,则应在其过滤器中包含此catetory.

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

参考:

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

从该页面中提取:

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