2011-12-20 12 views
7

Sono in grado di ricevere messaggi C2DM bene ma voglio inviare i dati a un'attività in esecuzione, cioè quando l'attività è in esecuzione, se il ricevitore riceve il messaggio C2DM è per inviare i dati all'attività in esecuzione. Il codice del ricevitore è (nessun bug nel codice):Come inviare dati a un'attività in esecuzione da Broadcast Receiver,

public class C2dmreceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     Log.w("C2DM", "Message Receiver called"); 
     if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) 
     { 
      final String payload = intent.getStringExtra("key1"); 
      Log.d("C2DM", "message = " + payload); 
     } 
    }} 

che ho provato in questo modo all'interno l'attività nel tentativo di registrare il ricevitore in attività, in modo che il ricevitore può inviare i dati e l'attività in esecuzione può ricevere i dati: -

C2dmreceiver c2dmr = new C2dmreceiver(); 
Registration.this.registerReceiver(c2dmr, new IntentFilter()); 

non so cosa mettere dentro l'IntentFilter(), anche cos'altro devo mettere nel codice dell'attività e il codice del ricevitore in modo che mentre l'attività è in esecuzione e alcuni messaggi C2DM arrivano, il ricevitore può inviare i dati all'attività in esecuzione.

Quindi, per favore dimmi il codice che deve essere inserito nell'attività e nel ricevitore e potrebbe anche essere nel manifest in modo che i dati dal destinatario possano essere inviati all'attività in esecuzione.

Qualsiasi consiglio è molto apprezzato.

risposta

21

Prima di tutto non è consigliabile sottoscrivere il ricevitore c2dm in attività. Fallo in manifest. Per passare i dati all'attività è possibile creare un campo stringa statico in Attività e impostare lì String.

Si può fare qualcosa di simile:

in Activity

public static YourActivity mThis = null; 
@Override 
protected void onResume() { 
    super.onResume(); 
    mThis = this; 
} 
@Override 
protected void onPause() { 
    super.onPause(); 
    mThis = null; 
} 

Nel vostro BroadcastReceiver:

@Override 
public void onReceive(Context context, Intent intent) { 
... 
if (YourActivity.mThis != null) { 
    ((TextView)YourActivity.mThis.findViewById(R.id.text)).setText("received c2dm"); 
} 
else { 
... 
} 
+0

ho bisogno della mia attività di ottenere i dati C2DM dal ricevitore e anche essere notificata l'arrivo dei dati, come si può fare? Voglio solo sapere come si registra l'attività su un particolare ricevitore broadcast e ricevere gli aggiornamenti non appena vengono ricevuti dal ricevitore. –

+1

Non dovresti registrare C2DMReceiver in Attività - perché i messaggi possono arrivare quando l'attività non è iniziata - devi allenare questo messaggio. Per il passaggio di dati è possibile utilizzare campi statici o singleton. – Jin35

+0

Si prega di fornire un'implementazione di esempio. –

Problemi correlati