【问题标题】:How to send data to a running activity from Broadcast Receiver,如何从广播接收器向正在运行的活动发送数据,
【发布时间】:2011-12-20 04:31:06
【问题描述】:

我能够很好地接收 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 );
       }
     }}

我在activity内部尝试过这样的尝试,试图在activity中注册receiver,以便receiver可以发送数据,运行activity可以接收数据:-

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

我不知道在 IntentFilter() 中放什么,我还必须在活动代码和接收器代码中放什么,以便在活动运行时接收器发送一些 C2DM 消息可以将数据发送到正在运行的活动。

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

非常感谢任何建议。

【问题讨论】:

    标签: android android-activity broadcastreceiver


    【解决方案1】:

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

    你可以这样做:

    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 {
    ...
    }
    

    【讨论】:

    • 我需要我的活动从接收方获取 C2DM 数据,并在数据到达时收到通知,怎么做?我只想知道如何将活动注册到某个特定的广播接收器并在接收器接收到它们时获取更新。
    • 您不应该在活动中注册 C2DMReceiver - 因为在活动未开始时可能会出现消息 - 您必须锻炼此消息。对于传递数据,您可以使用静态字段或单例。
    • 请您提供一个示例实现。
    • 嗯,我不知道这是否是一个好的做法,但这是一个非常好的主意,而且它正在工作
    • 你能帮我解决这个问题吗:((TextView)YourActivity.mThis.findViewById(R.id.text)).setText("received c2dm"); ..我不明白这一点,通过复制粘贴它显示错误..
    猜你喜欢
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多