有人可以向我解释Intent
类别的目的吗?我什么时候应该自己制作等等?我书中关于Intent
类别的唯一内容是他们可以分组意图吗?
答案 0 :(得分:38)
单独的类别是无用的,它们用于描述intent-filter
中"implicit intent"的可能目标。
如果您知道要启动哪个类/活动并使用startActivity()
或startActivityForResult()
,则称其为“明确意图”。
以下是隐式意图如何运作的类比:
想象一下,你所有的应用程序都坐在一个大房间里,什么都不做。 然后,另一个应用程序,比如Dropbox,需要有人打开一个 PDF文件。 Dropbox应用程序进入系统并说“嘿,有人 需要打开这个PDF文件...“(这是发送隐含的意图)。
系统现在走到房间,喊道:“你们哪一个可以 显示PDF文件?“。可以站起来的应用程序 系统看到它们(这些应用程序具有匹配的活动 意图类别)。
然后它会为您提供一个对话框,您可以在其中选择其中一个 应用程序:
如果您希望在应用程序范围之外使用某些Activity / BroadcastReceivers / Services,可以使用Android Manifest向其声明“intent filter”,以便在系统或应用程序启动时打开它匹配的“隐含意图”。
您为应该从启动器打开的Activity执行此操作(例如):
<activity android:name=".SomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这会收听由Androids Launcher(ACTION_MAIN
)触发的CATEGORY_LAUNCHER
- 动作。
“意图过滤器”中有两个子元素:
action
。这指定了“intent filter”应该采取的操作
听听。category
。这指定了活动应该如何
调用。其中一个category
可以是(例如)android.intent.category.DEFAULT
,它告诉Activity在全屏模式下正常启动。例如,android.intent.category.TAB
- 类别将此活动声明为TabActivity
中的标签,因此只能将其作为标签打开。
另一个例子是添加android.intent.category.PREFERENCE
- 类别,它会将活动声明为您的设置活动。
声明自己的category
既不可能也不必要。
您还需要了解这些事件是由系统/另一个应用程序触发的,您只能指定触发时是否以及如何做出反应。