BroadcastReceiver.getResultsExtra()与Intent.getExtras()

时间:2016-06-28 20:22:35

标签: android android-intent android-broadcastreceiver

在查看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();
    }
}

为什么选择一种方法而不是另一种方法?在某些情况下,某人比其他方法更受欢迎吗?它们是等价的吗?

2 个答案:

答案 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);