我能够很好地接收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消息来到接收器可以将数据发送到正在运行的活动。
所以,请告诉我要放入活动和接收器的代码,也可以在清单中,以便接收方的数据可以发送到正在运行的活动。
非常感谢任何建议。
答案 0 :(得分:21)
首先,在活动中订阅c2dm接收器并不是最好的主意。在清单中做它。要将数据传递给活动,您可以在Activity中创建静态字符串字段,并在那里设置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 {
...
}