意图类别的目的是什么?

时间:2011-09-09 18:11:51

标签: java android android-intent

有人可以向我解释Intent类别的目的吗?我什么时候应该自己制作等等?我书中关于Intent类别的唯一内容是他们可以分组意图吗?

1 个答案:

答案 0 :(得分:38)

单独的类别是无用的,它们用于描述intent-filter"implicit intent"的可能目标。

如果您知道要启动哪个类/活动并使用startActivity()startActivityForResult(),则称其为“明确意图”。

以下是隐式意图如何运作的类比:

  

想象一下,你所有的应用程序都坐在一个大房间里,什么都不做。   然后,另一个应用程序,比如Dropbox,需要有人打开一个   PDF文件。 Dropbox应用程序进入系统并说“嘿,有人   需要打开这个PDF文件...“(这是发送隐含的意图)。

     

系统现在走到房间,喊道:“你们哪一个可以   显示PDF文件?“。可以站起来的应用程序   系统看到它们(这些应用程序具有匹配的活动   意图类别)。

     

然后它会为您提供一个对话框,您可以在其中选择其中一个   应用程序:Complete action using


如果您希望在应用程序范围之外使用某些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 - 动作。

“意图过滤器”中有两个子元素:

  1. action。这指定了“intent filter”应该采取的操作 听听。
  2. 一个或多个category。这指定了活动应该如何 调用。
  3. 其中一个category可以是(例如)android.intent.category.DEFAULT,它告诉Activity在全屏模式下正常启动。例如,android.intent.category.TAB - 类别将此活动声明为TabActivity中的标签,因此只能将其作为标签打开。

    另一个例子是添加android.intent.category.PREFERENCE - 类别,它会将活动声明为您的设置活动。


    声明自己的category既不可能也不必要。

    您还需要了解这些事件是由系统/另一个应用程序触发的,您只能指定触发时是否以及如何做出反应。