2011-12-20 11 views
7

Jestem w stanie odebrać wiadomość C2DM dobrze, ale chcę wysłać dane do działającej aktywności, tj. Gdy działanie jest uruchomione, jeśli odbiornik odbiera wiadomość C2DM aby wysłać dane do działającej działalności. Kod odbiornika jest (żadnych błędów w kodzie):Jak wysłać dane do działającej aktywności z odbiornika Broadcast,

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); 
     } 
    }} 

próbowałem tak wewnątrz aktywność w próbie zarejestrowania odbiornika w działalności tak, że odbiornik może przesyłać dane i aktywności bieganie może odbierać dane: -

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

nie wiem co umieścić wewnątrz IntentFilter(), a także, co jeszcze muszę umieścić w kodzie działalności oraz kod odbiornika tak, że podczas aktywności jest uruchomiony i pojawia się komunikat C2DM, że odbiornik może wysłać dane do działającej aktywności.

Poinformuj mnie o kodzie, który chcesz umieścić w działaniu i odbiorniku, a także znajduj się w manifeście, aby dane z odbiornika mogły zostać wysłane do działania.

Każda rada jest wysoko ceniona.

Odpowiedz

21

Przede wszystkim nie jest najlepszym pomysłem zasubskrybowanie odbiornika c2dm w działaniu. Zrób to w zamanifestowaniu. Aby przekazać dane do działania, możesz utworzyć statyczne pole ciągu w Aktywności i ustawić w nim Ciąg.

można zrobić coś takiego:

w Activity

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

W swojej 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

muszę moją aktywność uzyskać dane C2DM z odbiornika, a także być informowany o nadejście danych, jak można to zrobić? Chcę tylko wiedzieć, w jaki sposób aktywność rejestruje się w konkretnym odbiorniku telewizyjnym i otrzymywać aktualizacje, gdy są odbierane przez odbiornik. –

+1

Nie powinieneś rejestrować C2DMReceiver w działaniu - ponieważ wiadomości mogą przychodzić, gdy aktywność nie jest uruchomiona - musisz przećwiczyć tę wiadomość. Do przekazywania danych można użyć pól statycznych lub singletonu. – Jin35

+0

Proszę podać przykładową implementację. –

Powiązane problemy