Receptor de Android para múltiples acciones?
Pregunta sencilla: ¿puedo registrar un único BroadcastReceiver en varias acciones de intención? Esto es lo que estoy considerando:
<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 la clase myReceiver ' onReceive , ¿podría comprobar intent.getAction()
para ACTION_MEDIA_BUTTON and ACTION_HEADSET_PLUG
?
- Android startActivity () se estrelló
- ¿Cómo recibo una URL de "Compartir" del navegador?
- Abrir una aplicación de Android dentro de otra
- ¿Cómo enviar un objeto de una actividad de Android a otro usando Intents?
- Compartir intención con la opción Bluetooth solamente
Gracias.
- Cómo iniciar la actividad con FLAG_REORDER_TO_FRONT y FLAG_CLEAR_TOP
- ¿Cuál es la intención de abrir la configuración de DND?
- Cómo borrar todas las actividades de la pila en API 8?
- Android - getIntent (). GetStringExtra () devuelve null
- Cómo capturar el nuevo intento en onNewIntent ()?
- Cómo abrir archivos privados guardados en el almacenamiento interno mediante Intent.ACTION_VIEW?
- Propuesta de participación exitosa para android
- Cómo decidir de qué actividad venimos?
Supongo que puedes tener múltiples s cada uno 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 compruebe la acción del Intent en el onReceive del receptor.
Sí, un BroadcastReceiver puede recibir intentos con varias acciones. Y su ejemplo es válido. Puede tener varias "acciones" en un filtro. Además, en este caso es 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 usted está esperando una de varias acciones (lógico "o").
Estas palabras de " Intento y filtros de intención " explican la elección entre uno y muchos filtros de intención para casos más complejos:
Está bien crear un filtro que incluya más de una instancia de <action>, <data> o <category>. Si lo hace, sólo tiene que estar seguro de que el componente puede manejar todas y cada una de las combinaciones de los elementos de filtro.
Cuando se desea manejar múltiples tipos de intentos, pero sólo en combinaciones específicas de acción, datos y tipo de categoría, es necesario crear filtros de intención múltiple.
Vea los diferentes ejemplos de filtros de intenciones aquí: AndroidManifest.xml
Sí, puede tener varias acciones para el mismo BroadcastReceiver. De hecho, lo que hiciste es justo:
<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ó.
Sobre la prioridad que estableció:
https://developer.android.com/guide/topics/manifest/intent-filter-element.html
Android: priority La prioridad que se debe dar al componente principal con respecto a las intenciones de manejo del tipo descrito por el filtro. Este atributo tiene significado tanto para las actividades como para los receptores de radiodifusión:
Proporciona información sobre cómo una actividad es capaz de 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 una intención podría ser manejada por múltiples actividades con diferentes prioridades, Android considerará sólo aquellos con valores de prioridad más alta como objetivos potenciales 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 se llaman antes de aquellos con valores más bajos. (El pedido se aplica sólo a mensajes síncronos, se ignora para mensajes asíncronos.)
Utilice este atributo sólo si realmente necesita imponer un orden específico en el que se reciben las emisiones o desea obligar a Android a preferir una actividad sobre otras.
El valor debe ser un 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 menor que 1000.
- No se puede iniciar el servicio – Requiere ACCESS_MOCK_LOCATION configuración segura
- Retrofit @GET – cómo mostrar la cadena de solicitud?