“android.意图.类别.默认”的用途是什么?

7xllpg7q  于 2022-11-27  发布在  Android
关注(0)|答案(8)|浏览(176)

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

llmtgqce

llmtgqce1#

类别用于隐式Intent。因此,如果您的Activity可以在没有其他特定类别分配给Activity的情况下由隐式Intent启动,则Activity的Intent筛选器应包括此类别。(即使Intent筛选器中有其他类别)。如果您确定Activity必须与任何其他类别一起调用,则不要使用默认值。
将类别设置为默认并不意味着在应用启动时默认使用此Activity。Activity只是对系统说“哦,我可以启动,即使启动者Intent的类别设置为 Nothing

7kqas0il

7kqas0il2#

此类别主要用于隐式Intent。如果您的Activity希望由隐式Intent启动,则应在其筛选器中包含此类别。
我认为“默认”这个词应该理解为“默认***候选***"。如果对一条数据的操作解析为多个活动,那么Android将向用户呈现所有候选活动,用户可以选择自己喜欢的默认活动。
参考编号:
http://developer.android.com/guide/components/intents-filters.html
从该页摘录:
Android将所有传递给startActivity()的隐式Intent视为至少包含一个类别:“android.intent. CATEGORY.DEFAULT”(类别默认常量)。因此,愿意接收隐式Intent的Activity必须在其Intent过滤器中包含“android.intent.category.DEFAULT”。(具有“android.intent.action.MAIN”和“android.intent.category.LAUNCHER”设置的过滤器除外。它们标记开始新任务和在启动器屏幕上显示的Activity。它们可以包含“android. intent. category.DEFAULT”在类别列表中,但不需要。)

wmtdaxz3

wmtdaxz33#

活动将需要支持CATEGORY_DEFAULT,以便可以通过Context.startActivity()找到它们。
若要接收隐式Intent,必须在Intent筛选器中包含CATEGORY_DEFAULT类别。方法startActivity()和startActivityForResult()将所有Intent视为声明了CATEGORY_DEFAULT类别。如果未在Intent筛选器中声明该类别,则不会将任何隐式Intent解析为Activity。

xxb16uws

xxb16uws4#

它实际上是为了确保你的其他Activity可以在应用运行时被调用。LAUNCHER会让拥有它的Activity成为第一个启动的Activity。要使用Intent来访问其他Activity,它们必须通过设置DEFAULT被列为“实际”Activity。这是我所知道的,所以如果它是错误的,不要引用我的话。

oaxa6hgo

oaxa6hgo5#

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

rdrgkggo

rdrgkggo6#

类别:

android.intent.category.DEFAULT

匹配任何隐式Intent。要使Activity接收任何隐式Intent,必须包含此类别。
https://codelabs.developers.google.com/codelabs/android-training-activity-with-implicit-intent/index.html?index=..%2F..%2Fandroid-training#6

t40tm48m

t40tm48m7#

https://developer.android.com/guide/components/intents-filters
若要接收隐式Intent,必须在Intent筛选器中包含CATEGORY_DEFAULT类别。startActivity()与startActivityForResult()方法将所有Intent视为声明了CATEGORY_DEFAULT类别。如果未在Intent筛选器中声明此类别,则不会将任何隐式Intent解析为您的Activity。

vuv7lop3

vuv7lop38#

在Activity接受隐式Intent之前,Intent必须通过类别测试:Intent中的每个类别必须与Activity的Intent过滤器中的完全相同的类别匹配。
类别DEFAULT自动应用于所有隐式Intent(默认情况下),因此,由于上述原因,希望接收任何隐式Intent的每个Activity都必须在其Intent过滤器中包含此类别。
来源

相关问题