在Google的C2DM示例代码中,当它们在BroadcastReceiver中接收到通知时,他们会调用:
setResult(Activity.RESULT_OK, null /* data */, null /* extra */);
我不知道setResult是做什么的。这就是他们在Android文档中所说的:



有人可以解释它们的意思以及为什么我要称呼它吗?

完整的代码:

public class C2DMBaseReceiver extends BroadcastReceiver {

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

最佳答案

setResult(...)中的BroadcastReceiver方法,它比跟踪目的更重要。

如果您熟悉Activity的方法setResult(...),则可以以相同的方式在广播中想到此方法。但是,在 Activity 的情况下,没有获得类似于onActivityResult(int requestCode, int resultCode, Intent data)的回调方法,而是使用广播setResult(...)方法以特定顺序跟踪广播的结果,这就是documentation说:



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

它之所以只说Context.sendOrderedBroadcast(),是因为对ojit_code方法的常规调用可能不会等待1个接收者完成其执行,然后再启动另一个线程以在另一个监听相同 Intent 的接收者中执行代码。

关于android - 为什么在BroadcastReceiver中调用setResult?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8990671/

10-09 15:48