,当他们在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 */);
}
}
答案 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);
希望我帮助过你。