2012-01-30 32 views
12

que he encontrado algo como esto en el AndroidManifest.xml:Android BroadcastReceiver sin ninguna intención filtro

<receiver android:name="com.testco.test.TestReceiver"/> 

Lo anterior es TestReceiver extiende la clase BroadcastReceiver. Pensé que el receptor recibiría todas las intenciones, pero aparentemente no, y no funciona a menos que agregue etiquetas de filtro de intención. Entonces, ¿qué hace si no tiene filtro de intención? ¿Es un error tipográfico o realmente hace algo?

ACTUALIZACIÓN: Me cuenta de esto con la ayuda de este enlace Trying to have a Broadcast Receiver with No filter

lugar de llamar a una emisión con el identificador de cadena de costumbre, se puede establecer una cadena de acción de la intención, y luego lo transmitió. Código de muestra de referencia:

Intent notifyIntent = new Intent(getApplicationContext(), TestReceiver.class); 
notifyIntent.setAction("RECEIVE"); 
sendBroadcast(notifyIntent); 

El manejo en el BroadcastReceiver es el mismo.

+0

Quien haya escrito ese código, dígales que su estilo de acción no sigue el estándar. Debe seguir com.packagename.intent.messagehere, este es el estándar que se colocó y, como tal, se debe seguir. – JoxTraex

Respuesta

6

Un filtro de Intención en el caso de las intenciones implícitas, y si no se especifica un filtro de intención, que se debe invocar explícitamente. Así que para invocar este receptor que se necesita para invocar:

Intent intent = new Intent(getApplicationContext(), com.testco.test.TestReceiver.class); 
sendBroadcast(intent);` 
+0

Hola Alex, hace un tiempo. Tengo una pregunta rápida sobre tu respuesta. Cuando dices implícito, ¿significa esto que puede haber múltiples acciones diferentes para tomar? – Andy

+0

Intenciones implícitas son las intenciones en las que no especificamos el componente de destino de forma explícita, el componente de destino es decidido por el sistema a través de filtros de intención. – jeet

2

Desde el documentation:

androide: exportada: Sea o no el receptor de radiodifusión puede recibir mensajes de fuentes externas de su aplicación - "verdaderos" si se puede, y "falsos" en caso contrario. Si "falsa", los únicos mensajes que el receptor de radiodifusión puede recibir son los enviados por los componentes de la misma aplicación o aplicaciones con el mismo ID de usuario.

El valor predeterminado depende de si el receptor de difusión contiene filtros de intención. La ausencia de filtros significa que solo puede invocarse mediante objetos de Intento que especifiquen su nombre de clase exacto. Esto implica que el receptor está destinado solo para el uso interno de la aplicación (ya que otros normalmente no conocerían el nombre de la clase). Entonces, en este caso, el valor predeterminado es "falso". Por otro lado, la presencia de al menos un filtro implica que el receptor de radiodifusión está destinado a recibir las intenciones difundidas por el sistema u otras aplicaciones, por lo que el valor por defecto es "verdadero".

Así que el receptor sólo se captura Intentos difundidas por su aplicación. Se necesita

0

Debe registrarse el receptor especificando las intenciones que desea recibir y si desea recibir todos los intentos a continuación se mencionan.

Intención Intención y el filtro se mencionan claramente en la API de cómo funcionan. Todos los intentos de concepto no son compatibles con la API pública.

Nota: Todavía puede utilizar este tipo de receptor dentro de su aplicación mediante el envío de difusión dentro de su aplicación.

0

<receiver android:name="com.testco.test.TestReceiver"/> etiqueta dirá a OS androide que yo soy reciver eso es todo. no dirá para qué evento está destinado a escuchar. Su filtro de intención definirá, para qué evento está haciendo una lista. por ejemplo,

<receiver android:name="com.testco.test.TestReceiver"/> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

este código le dice al sistema operativo Android que, estoy receptor y estoy enumerando para arrancar evento.Entonces, cuando el usuario reinicie su teléfono, se llamará a este receptor de difusión.

Cuestiones relacionadas