2010-12-16 22 views
16

Estoy tratando de enviar una Transmisión de un servicio a una Actividad. Puedo verificar que la transmisión se envía desde el servicio, pero la actividad no recoge nada.Transmisión de Android de Servicio a Actividad

Este es el código correspondiente servicio:

Intent i = new Intent(NEW_MESSAGE); 
    i.putExtra(FriendInfo.USERNAME, StringUtils.parseBareAddress(message.getFrom())); 
    i.putExtra(FriendInfo.MESSAGE, message.getBody()); 
    i.putExtra("who", "1"); 
    sendBroadcast(i); 

Y el extremo receptor de la clase de actividad:

public class newMessage extends BroadcastReceiver 
{ 
@Override 
    public void onReceive(Context context, Intent intent) 
    {  
    String action = intent.getAction(); 
     if(action.equalsIgnoreCase(IMService.NEW_MESSAGE)){  
      Bundle extra = intent.getExtras(); 
      String username = extra.getString(FriendInfo.USERNAME); 
      String message = extra.getString(FriendInfo.MESSAGE); 
      String who = extra.getString("who"); 
     } 
    } 
} 

se define La BroadcastReceiver dentro de una actividad. Estoy registrando el receptor en el método onCreate de la Actividad, no en el archivo Manifiesto.

Estoy perplejo de por qué no rec. cualquier cosa.

¿Alguna idea?

EDITAR
Registro tiene lugar como sigue:

registerReceiver(messageReceiver, new IntentFilter(IMService.NEW_MESSAGE)); 

Donde "messageReceiver" se define como

private newMessage messageReceiver = new newMessage(); 

IMService.NEW_MESSAGE es simplemente una cadena = "newMessage"

+0

¿cómo se registra su receptor? –

+0

¿dónde y cómo declaras el IntentFilter en tu actividad? – Franco

+0

IntentFilter no debería involucrarse aquí para la actividad, el receptor es lo que funciona aquí. –

Respuesta

10

no estoy seguro de si es específico para la puesta en marcha, o si se trata de un arreglo en general, pero mover el register/unregister a la onResume/onPause_respectively_ y no registrar en el onCreate resuelto el problema para mí.

+0

Puede registrar fácilmente el receptor en su AndroidManifest. –

1

Pruebe estas dos cosas:

  1. Utilice el archivo de manifiesto para registrar el receptor (pero apenas ayuda)
  2. Intente que su receptor sea una clase normal, no interna.
+0

Vladimir, gracias por la ayuda. Lo cambiaré a su propia clase más adelante, lo pensé después de que lo mencionó y parece ser la mejor idea. – Adam

0

El receptor de difusión de clase interna no podrá gestionar la difusión (significa que no puede encontrar esa clase). Así que hágalo como una clase separada

Definitivamente funcionará.

Cuestiones relacionadas