2011-06-29 12 views
10

Pregunta simple: ¿puedo registrar un solo BroadcastReceiver para múltiples intentos? Esto es lo que estoy considerando:Receptor Android para múltiples acciones?

<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> 

Así que en myReceiver clase OnReceive, pude comprobar intent.getAction() tanto para ACTION_MEDIA_BUTTON and ACTION_HEADSET_PLUG?

Gracias.

Respuesta

24

Supongo que puede tener varias s cada una con su elemento de acción.

<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> 

Y luego verifique la acción de Intención en el receptor del receptor.

+9

En realidad, el filtro de la intención puede tener múltiples acciones: http://developer.android.com/guide/topics/intents/ intents-filters.html # ifs – advantej

+3

La documentación dice que 'Un componente de la aplicación debe declarar filtros separados para cada trabajo único que puede hacer. Esto permitiría detalles más finos para diferentes acciones. –

5

Sí, un BroadcastReceiver puede recibir intentos con varias acciones. Y su ejemplo es válido. Puede tener múltiples "acciones" en un filtro. Además, en este caso es más más apropiado que lo que parece una manera más segura: crear varios filtros con una sola acción (como se propone en la respuesta de @advantej). Tener varias acciones en un filtro comunica claramente que está esperando una de varias acciones ("o" lógico).

Estas palabras de "Intent and Intent filters" explicar la elección entre uno contra muchos filtros intención para casos más complejos:

Está bien para crear un filtro que incluye más de una instancia de < acción >, < de datos >, o < categoría >. Si lo hace, simplemente necesita ser seguro de que el componente puede manejar cualquiera y todas las combinaciones de esos elementos de filtro.

Cuando quiere manejar múltiples tipos de intenciones, pero solo en combinaciones específicas de acción, datos y tipo de categoría, entonces necesita crear múltiples filtros de intención.

favor ver diferentes ejemplos de Intención filtra aquí: AndroidManifest.xml

2

Sí, puede tener múltiples acciones para la misma BroadcastReceiver. De hecho, lo que hizo es simplemente correcto:

<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> 

Ya he utilizado este enfoque en un proyecto y funcionó.

0

acerca de la prioridad establecida:

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

androide: prioridad, la prioridad que debe darse a la componente de los padres con respecto a la manipulación de las intenciones del tipo descrito por el filtro.Este atributo tiene significado tanto para las actividades como para los receptores de difusión:

Proporciona información sobre la capacidad de una actividad para responder a una intención que coincida con el filtro, en relación con otras actividades que también podrían responder a la intención. Cuando un intento podría ser manejado por múltiples actividades con diferentes prioridades, Android considerará solo aquellos con valores de mayor prioridad como posibles objetivos para la intención.

Controla el orden en que se ejecutan los receptores de difusión para recibir mensajes de difusión. Aquellos con valores de prioridad más altos son llamados antes que aquellos con valores más bajos. (El orden solo se aplica a mensajes síncronos; se ignora para mensajes asíncronos)

Utilice este atributo solo si realmente necesita imponer un orden específico en el que se reciben las transmisiones o si desea forzar a Android a preferir una actividad otros.

El valor debe ser un número entero, como "100". Los números más altos tienen una prioridad más alta . El valor predeterminado es 0. El valor debe ser mayor que -1000 y menos de 1000.

Cuestiones relacionadas