意图类别的目的是什么?

Luc*_*uke 24 java android android-intent

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

Luk*_*uth 39

该类别的单独是无用的,它们被用来描述一个可能的目标为"隐含意图"intent-filter.

当你知道你要启动和使用哪个类/活动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>
Run Code Online (Sandbox Code Playgroud)

这会侦听ACTION_MAINAndroids Launcher(CATEGORY_LAUNCHER)触发的-action .

您的"intent filter"中有两个子元素:

  1. action.这指定了"intent filter"应该监听的操作.
  2. 一个或多个category.这指定了如何调用活动.

其中一个category可以(例如)android.intent.category.DEFAULT,它告诉Activity在全屏模式下正常启动.该android.intent.category.TAB例如-category声明此活动作为一个标签TabActivity,所以它只能被打开的选项卡.

另一个例子是添加android.intent.category.PREFERENCE-category,它会将活动声明为您的Settings-Activity.


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

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