为什么在BroadcastReceiver中调用setResult?

时间:2012-01-24 16:48:08

标签: android broadcastreceiver

来自谷歌的C2DM示例代码中的

,当他们在BroadcastReceiver中收到通知时,他们会调用:

setResult(Activity.RESULT_OK, null /* data */, null /* extra */);

我不知道setResult做了什么。这就是他们在Android文档中所说的内容:

  

更改从此广播返回的所有结果数据;只要   适用于通过Context.sendOrderedBroadcast发送的广播。所有   当前结果数据被赋予此方法的值替换。

有人可以解释他们的意思以及为什么我需要打电话给它?

完整代码:

public class C2DMBaseReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        C2DMReceiver.runIntentInService();
        setResult(Activity.RESULT_OK, null /* data */, null /* extra */);
    }
}

3 个答案:

答案 0 :(得分:12)

setResult(...)中的BroadcastReceiver方法,对于跟踪目的而言,它更重要。

如果您熟悉Activity的方法setResult(...),您可以用同样的方式在广播中考虑这种方法。但是,在活动的情况下,不使用onActivityResult(int requestCode, int resultCode, Intent data)之类的回调方法,而是使用广播setResult(...)方法按特定顺序跟踪广播的结果,这就是documentation的原因。说:

  

仅适用于通过Context.sendOrderedBroadcast发送的广播。所有当前结果数据都将替换为此方法的值。

这意味着您可以使用方法getResultCode()getResultData()getResultExtras()来了解在所有不同的onReceive(Context, Intent)方法执行过程中的情况BroadcastReceiver已注册处理您的广播。因此,您可以知道在当前沿所有接收器执行的BroadcastReceiver之前调用的代码执行结果。

它只说Context.sendOrderedBroadcast(),因为对sendBroadcast(...)方法的常规调用可能不会等待1个接收者完成其执行,然后再启动另一个线程来执行其他接收器中的代码同样的意图。< / p>

答案 1 :(得分:-1)

setResult()方法设置要在调用Intent中使用的结果。假设您已使用startActivityForResult(intent,code)从任何其他活动调用自定义接收器,然后在同一活动中的onActivityResult()方法中,您可以使用从被调用活动获得的结果,仅当有一个setResult()方法时另一项活动。这只是一种通过意图调用活动并将结果返回到同一活动的方法。

答案 2 :(得分:-1)

示例:在主活动中,您使用请求代码启动活动。您的主要人员会在此活动结束时等待结果。

startActivityForResult (Intent intent, int requestCode);

在他工作结束时,新活动设置结果代码(工作完成,工作B完成......等)和意图(不必要),并通过调用finish()结束自己。

void setResult (int resultCode, Intent data);

您的主要活动使用功能onActivityResult()获得此结果。它检查请求代码以了解已执行的工作并获取此工作的结果/状态。 (以及数据,如果有等待意图。但数据也可以是结果代码。)

void onActivityResult(int requestCode, int resultCode, Intent data);

希望我帮助过你。