android – 如何从Broadcast Receiver向正在运行的活动发送数据,

我能够很好地接收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消息到来,接收器可以发送数据到正在运行的活动.

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

任何建议都非常感谢.

解决方法

首先,在活动中订阅c2dm接收器并不是最好的主意.在清单中做.要将数据传递给活动,您可以在Activity中创建静态字符串字段,并在那里设置String.

你可以这样做:

在活动中

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性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...