简单的问题 - 我可以将单个 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
?
感谢。
答案 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。