2011-05-10 12 views
7

Deseo transmitir intenciones con datos personalizados y solo el receptor que tiene esta información personalizada debe recibir esta intención, ¿cómo podría hacerse esto?Intento de filtrado basado en datos personalizados

esta forma transmito la intención:

Intent intent = new Intent(); 
intent.setAction("com.example"); 
context.sendBroadcast(intent); 

y yo defino el receptor de radiodifusión de la siguiente manera:

<receiver android:name="com.test.myReceiver" android:enabled="true"> 
     <intent-filter> 
      <action android:name="com.example"></action> 
     </intent-filter> 
    </receiver> 

Respuesta

0

Si ya definir la clase de receptor de radiodifusión, entonces el siguiente paso es registrarse en la Actividad/Servicio que le gustaría recibir el intento de transmisión. Un ejemplo de registro:

IntentFilter iFilter = new IntentFilter(); 
    iFilter.addAction("com.example"); //add your custom intent to register 
    //below is your class which extends BroadcastReceiver, contains action 
    //which will be triggered when current class received the broadcast intent 
    MyReceiver myReceiver = new MyReceiver(); 
    registerReceiver(myReceiver, iFilter); //register intent & receiver 

Si se destruye la actividad/servicio, para las mejores prácticas no se olvide de anular el registro del receptor de radiodifusión en la misma actividad/servicio:

@Override 
protected void onDestroy() { 
    if(myReceiver!=null) 
     unregisterReceiver(myReceiver) 
    super.onDestroy(); 
} 
clase

MyReceiver:

public class MyReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     if(intent.getAction().equals("com.example")){ 
      //DO SOMETHING HERE 
     } 
    } 
} 
+1

Un receptor que se define en el manifiesto no necesita registrarse de esta manera. Recibirá difusiones y activará su método onReceive() basado puramente en la entrada del manifiesto. – Maximus

+0

ah, ya veo, eso tiene sentido ... gracias por la corrección maximus –

2

Configure su clase de myReceiver básicamente cómo se publicaron los anms.

public class myReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     //Do something 
    } 
} 

Usted no debería tener que comprobar la acción Intención porque ya se ha filtrado para ello en base a lo que ha incluido en su manifiesto, al menos en este caso sencillo. Podría tener otras acciones y filtros, en cuyo caso necesitaría tener algún tipo de control sobre el intento recibido.

Si desea que el filtro filtre los datos, la documentación de sdk en los filtros de intención lo cubre. No soy bueno con los tipos de datos, por lo que cualquier ejemplo que daría sería relativamente pobre. En cualquier caso, aquí hay un enlace a la página del filtro de intención de manifiesto: http://developer.android.com/guide/topics/manifest/intent-filter-element.html

Y la página específica para el elemento de datos; http://developer.android.com/guide/topics/manifest/data-element.html

+0

quería filtrar usando una acción personalizada de datos no personalizada. – Jimmy

+0

De acuerdo, edité la publicación para agregar algunos enlaces de documentación si desea filtrar los datos. – Maximus

+0

Vi la documentación para Android antes de preguntar la pregunta, el asunto es en el nodo de datos que tienen ruta, esquema y rutaPrefijo. ¿Cuál uso para los datos personalizados? Puede dar un ejemplo . – Jimmy

Cuestiones relacionadas