AndroidManifest - intent-filter应该有多个动作吗?

时间:2014-01-22 21:36:21

标签: android android-manifest

我目前对MainActivity的intent-filter看起来像这样

<intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
            </intent-filter>

请注意,有2个操作节点。它是否正确?或者每个intent-filter只应该有一个动作节点吗?

此外,DEFAULT类别的目的是什么?

<category android:name="android.intent.category.DEFAULT" />

5 个答案:

答案 0 :(得分:9)

  

这是对的吗?

可能是,虽然在这种情况下我怀疑它不是你想要的。

<intent-filter>将匹配:

  • Intent行为和MAIN类别,或

  • LAUNCHER IntentUSB_ACCESSORY_ATTACHED类别

前者很常见。但是,我更怀疑LAUNCHER将与USB_ACCESSORY_ATTACHED类别一起使用。我甚至不确定它是否与活动一起使用,因为文档在这一点上有点混乱。

答案 1 :(得分:5)

根据您的活动需要,意图过滤器可以有多个操作。例如,如果您的应用程序从社交共享应用程序收到一个或多个图像,那么您将使用

<action android:name="android.intent.action.SEND"/>
<action android:name="android.intent.action.SEND_MULTIPLE"/>

有关参考,请查看Example Filters section of this article

答案 2 :(得分:1)

是的,来自<action>元素的文档:

http://developer.android.com/guide/topics/manifest/action-element.html

  

向意图过滤器添加操作。元素必须   包含一个或多个元素。如果它不包含任何,不   Intent对象将通过过滤器。见意图和意图   过滤有关意图过滤器和操作角色的详细信息   过滤器中的规范。

答案 3 :(得分:1)

意图过滤器可以应用于许多操作。但这意味着在接收代码中您需要检查哪个意图操作已激活。例如:

 <action android:name="android.intent.action.VIEW" />
 <action android:name="android.nfc.action.NDEF_DISCOVERED" />

boolean ndefAction = NfcAdapter.ACTION_NDEF_DISCOVERED.equals (intent.getAction ());

答案 4 :(得分:0)

我测试了它,如果不在类别中添加DEFAULT,它将无法正常工作。

<intent-filter>
   <action android:name="android.intent.action.MAIN" />
   <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
   <category android:name="android.intent.category.LAUNCHER" />
   <category android:name="android.intent.category.DEFAULT" /> <!--This is required-->
</intent-filter>