我能够很好地接收 C2DM 消息,但我想将数据发送到正在运行的 Activity ,即当 Activity 正在运行时,如果接收方收到 C2DM 消息,它会将数据发送到正在运行的 Activity 。接收器的代码是(代码中没有错误):
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 );
}
}}
我在 Activity 中尝试过这样尝试在 Activity 中注册接收器,以便接收器可以发送数据并且正在运行的 Activity 可以接收数据:-
C2dmreceiver c2dmr = new C2dmreceiver();
Registration.this.registerReceiver(c2dmr, new IntentFilter());
我不知道要在 IntentFilter() 中放入什么,也不知道我还必须在 Activity 代码和接收方代码中放入什么,以便在 Activity 运行时接收方收到一些 C2DM 消息可以将数据发送到正在运行的 Activity 。
那么,请告诉我要放入 Activity 和 Receiver 中的代码,也可能在 list 中,以便来自 Receiver 的数据可以发送到正在运行的 Activity。
非常感谢任何建议。
最佳答案
首先,在 Activity 中订阅 c2dm 接收器并不是最好的主意。在 list 中做。为了将数据传递给 Activity ,您可以在 Activity 中创建静态字符串字段并在那里设置字符串。
你可以这样做:
在 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 {
...
}
关于android - 如何从广播接收器向正在运行的 Activity 发送数据,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8570823/