Android 如何从广播接收器向正在运行的活动发送数据,

Android 如何从广播接收器向正在运行的活动发送数据,,android,android-activity,broadcastreceiver,Android,Android Activity,Broadcastreceiver,我能够很好地接收C2DM消息,但我希望将数据发送到正在运行的活动,即当活动正在运行时,如果接收器接收到C2DM消息,则将数据发送到正在运行的活动。接收器代码为(代码中无错误): 我在活动中尝试过这样做,试图在活动中注册接收者,以便接收者可以发送数据,而正在运行的活动可以接收数据:- C2dmreceiver c2dmr = new C2dmreceiver(); Registration.this.registerReceiver(c2dmr, new IntentFilter()); 我不知

我能够很好地接收C2DM消息,但我希望将数据发送到正在运行的活动,即当活动正在运行时,如果接收器接收到C2DM消息,则将数据发送到正在运行的活动。接收器代码为(代码中无错误):

我在活动中尝试过这样做,试图在活动中注册接收者,以便接收者可以发送数据,而正在运行的活动可以接收数据:-

C2dmreceiver c2dmr = new C2dmreceiver();
Registration.this.registerReceiver(c2dmr, new IntentFilter());
我不知道在IntentFilter()中放入什么,也不知道在活动代码和接收器代码中还必须放入什么,以便在活动正在运行且出现一些C2DM消息时,接收器可以将数据发送到正在运行的活动

因此,请告诉我将要放入活动和接收器中的代码,也可能位于清单中,以便将来自接收器的数据发送到正在运行的活动


非常感谢您的任何建议。

首先,在活动中订阅c2dm接收器不是最好的主意。在舱单上做。要将数据传递给“活动”,可以在“活动”中创建静态字符串字段,并在其中设置字符串

您可以这样做:

活动中

public static YourActivity mThis = null;
@Override
protected void onResume() {
    super.onResume();
    mThis = this;
}
@Override
protected void onPause() {
    super.onPause();
    mThis = null;
}
在您的
广播接收器中

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

我需要我的活动从接收器获取C2DM数据,并在数据到达时得到通知,如何做到这一点?我只想知道如何将活动注册到某个特定的广播接收器,并在接收器接收到更新时获取更新。您不应该在活动中注册C2DMReceiver-因为活动未启动时可能会出现消息-您必须处理此消息。对于传递数据,您可以使用静态字段或单例。请您给出一个示例实现。嗯,我不知道这是否是一个好的实践,但这是一个非常好的主意,它正在工作。您可以在这方面帮我:((TextView)YourActivity.mThis.findViewById(R.id.text)).setText(“received c2dm”)。。我不明白这一点,复制粘贴显示错误。。
@Override
public void onReceive(Context context, Intent intent) {
...
if (YourActivity.mThis != null) {
    ((TextView)YourActivity.mThis.findViewById(R.id.text)).setText("received c2dm");
}
else {
...
}