Android接收器用于多个动作?

时间:2011-06-29 02:01:11

标签: android android-intent

简单的问题 - 我可以将单个 BroadcastReceiver 注册到多个意图操作吗?这是我正在考虑的事情:

<receiver android:name=".myReceiver">
    <intent-filter android:priority="1000000">
        <action android:name="android.intent.action.MEDIA_BUTTON" />
        <action android:name="android.intent.action.ACTION_HEADSET_PLUG" />
    </intent-filter>
</receiver>

因此,在 myReceiver onReceive 中,我可以检查intent.getAction()是否ACTION_MEDIA_BUTTON and ACTION_HEADSET_PLUG

感谢。

4 个答案:

答案 0 :(得分:29)

我猜你每个人都有多个动作元素。

<receiver android:name=".myReceiver">
     <intent-filter android:priority="1000000">
         <action android:name="android.intent.action.ACTION_HEADSET_PLUG" />
     </intent-filter>

     <intent-filter android:priority="1000000">
         <action android:name="android.intent.action.MEDIA_BUTTON" />
     </intent-filter>
</receiver>

然后在接收者的onReceive中检查Intent的动作。

答案 1 :(得分:5)

是的,一个BroadcastReceiver可以通过多个动作接收意图。 你的例子是有效的。您可能在一个过滤器中有多个“操作”。 此外,在这种情况下,更多比看起来更安全的方式更合适:用单个动作创建几个过滤器(如@advantej的答案中所提出的)。在过滤器中执行多个操作可以清楚地表明您期望执行多个操作之一(逻辑“或”)。

Intent and Intent filters”中的这些词解释了对于更复杂的案例,在一个与多个意图过滤器之间进行选择:

  

创建一个包含多个实例的过滤器是可以的   &lt; action&gt;,&lt; data&gt;或&lt; category&gt;。如果你这样做,你只需要   确定该组件可以处理任何和所有组合   那些过滤元素。

     

当您想要处理多种意图时,但仅限于   行动,数据和类别类型的特定组合,然后您   需要创建多个意图过滤器。

请在此处查看Intent过滤器的不同示例:AndroidManifest.xml

答案 2 :(得分:3)

是的,您可以为同一个BroadcastReceiver进行多项操作。事实上,你所做的只是正确的:

<receiver android:name=".myReceiver">
     <intent-filter android:priority="1000000">
         <action android:name="android.intent.action.ACTION_HEADSET_PLUG"/>
         <action android:name="android.intent.action.MEDIA_BUTTON" />
     </intent-filter>
</receiver>

我已经在项目中使用了这种方法,但它确实有效。

答案 3 :(得分:0)

关于您设置的优先级:

https://developer.android.com/guide/topics/manifest/intent-filter-element.html

  

机器人:优先       关于处理过滤器描述的类型的意图应该给予父组件的优先级。该属性对活动和广播接收者都有意义:

     

它提供了有关活动如何响应与筛选器匹配的意图的信息,相对于也可以响应意图的其他活动。当具有不同优先级的多个活动可以处理意图时,Android将仅考虑具有较高优先级值的活动作为意图的潜在目标。

     

它控制广播接收器执行接收广播消息的顺序。具有较高优先级值的那些在具有较低值的那些之前被调用。 (该命令仅适用于同步消息;异步消息会忽略它。)

     

仅当您确实需要强制接收广播的特定订单,或者希望强制Android更喜欢某个活动而不是其他活动时,才使用此属性。

     

该值必须是整数,例如“100”。更高的数字有一个   优先级更高。默认值为0.值必须更大   比-1000还不到1000。