在查看Android源代码时,我发现了两种常见的方法来获取包含结果的额外数据的Bundle。
一个。致电getResultsExtra()
private class StatusBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = getResultExtras(true);
}
}
B中。致电intent.getExtras()
private class StatusBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle b = intent.getExtras();
}
}
为什么选择一种方法而不是另一种方法?在某些情况下,某人比其他方法更受欢迎吗?它们是等价的吗?
答案 0 :(得分:2)
" BroadcastReceiver.getResultExtras"当您使用" Context.sendOrderedBroadcast"发送有序广播时,该方法很有意义,因为您可以修改结果集以发送到下一个广播接收器(请记住,当您发送有序广播时,接收器是在同步的mather中调用,而不是普通广播的异步mather" Context.sendBroadcast")。考虑到这一点,想象你有3个接收器并且你向他们发送了一个有序广播(假设你把广播1的优先级作为第一个然后),然后接收器1可以用"得到结果集。 BroadcastReceiver.getResultExtras"方法并添加一些值,当广播到达时,接收器2将看到该值,等等。 " Intent.getExtras()"只会给你广播接收器的意图的额外值。
答案 1 :(得分:2)
getResultExtras()的用法如下:
Bundle results = getResultExtras(true);
results.putString("someTag", "someValue");
在不同接收者之间共享信息/值
因此,如果您在某些BroadcastReceiver中输入一些值或从getResultExtra()更改返回的地图,则会根据docs
另一方面,检索前一个接收器设置的当前结果额外数据。您对返回的地图所做的任何更改都将传播到下一个接收器。
intent.getExtras()
在开始广播时使用intent.putExtra()
返回在intent extras中设置的值,例如:
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
intent.setAction("com.yourpackage.BroadcastReceiver");
intent.putExtra("someTag", "someValue");
sendBroadcast(intent);