如何将数据发送到广播接收器正在运行的活动,

我能够接收C2DM消息,但是我想将数据发送到正在运行的活动,即当活动正在运行时,如果接收方收到C2DM消息,那么就是将数据发送到正在运行的活动。 接收者的代码是(代码中没有错误):

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

我已经尝试在活动中这样尝试注册接收器,以便接收器可以发送数据,并且运行活动可以接收数据:

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

我不知道要在IntentFilter()里面放什么,还有什么我必须把活动的代码和接收者的代码放在一起,这样当活动运行时,一些C2DM消息到来,接收者可以发送数据到正在运行的活动。

所以,请告诉我要放在活动和接收器中的代码,也可以放在清单中,以便接收器的数据可以发送到正在运行的活动。

任何意见是高度赞赏。

Related of "如何将数据发送到广播接收器正在运行的活动,"

首先,在活动中订阅c2dm接收器并不是最好的办法。 做清单。 为了将数据传递给活动,您可以在Activity中创build静态string字段,并在其中设置string。

你可以做这样的事情:

Activity

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

在您的BroadcastReceiver

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