Android接收器用于多个动作?

JDS*_*JDS 13 android broadcastreceiver 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>
Run Code Online (Sandbox Code Playgroud)

所以在myReceiver类的' onReceive中,我能检查BroadcastReceiver两者myReceiver吗?

谢谢.

adv*_*tej 29

我猜你可以有多个s,每个都有自己的动作元素.

<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>
Run Code Online (Sandbox Code Playgroud)

然后在接收器的onReceive中检查Intent的动作.

  • 实际上,intent过滤器可以有多个操作:http://developer.android.com/guide/topics/intents/intents-filters.html#ifs (9认同)
  • 文档说"应用程序组件应该为它可以执行的每个唯一作业声明单独的过滤器.这将为不同的操作提供更精细的细节. (3认同)

yvo*_*olk 5

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

" Intent和Intent过滤器 "中的这些单词解释了在一个与多个intent过滤器之间选择更复杂的情况:

可以创建一个包含多个<action>,<data>或<category>实例的过滤器.如果这样做,您只需要确定该组件可以处理这些过滤器元素的任何和所有组合.

如果要处理多种意图,但只能处理动作,数据和类别类型的特定组合,则需要创建多个意图过滤器.

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