2016-06-28 8 views
1

Beim Betrachten der Android-Quelle, beobachte ich zwei gängige Methoden, um das Bundle mit den zusätzlichen Daten des Ergebnisses zu erhalten.BroadcastReceiver.getResultsExtra() vs. Intent.getExtras()

A. Anrufe getResultsExtra()

private class StatusBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle b = getResultExtras(true); 
    } 
} 

B. intent.getExtras() Calls

private class StatusBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle b = intent.getExtras(); 
    } 
} 

Warum würden Sie eine Methode, über die andere Methode wählen? Gibt es bestimmte Situationen, in denen man gegenüber der anderen Methode bevorzugt wird? Sind sie gleichwertig?

Antwort

1

getResultExtras() wird wie folgt verwendet:

Bundle results = getResultExtras(true); 
results.putString("someTag", "someValue"); 

Informationen/Werte zwischen verschiedenen Empfängern zu teilen

Also, wenn Sie einen Wert gesetzt werden oder die zurückgegebene Karte vom getResultExtra ändern() in einigen BroadcastReceiver, wird es durch den vorherigen Empfänger an den nächsten Empfänger gemäß den als eingestellt wird gesendet docs

Abrufen der aktuellen Ergebnis zusätzlichen Daten. Alle Änderungen, die Sie an der zurückgegebenen Map vornehmen, werden an den nächsten Empfänger weitergegeben.

auf der anderen Seite intent.getExtras() gibt die Werte, die in der Absicht Extras gesetzt wurden intent.putExtra() mit, während die Sendung beginnen, zum Beispiel dieser:

Intent intent = new Intent(); 
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
intent.setAction("com.yourpackage.BroadcastReceiver"); 
intent.putExtra("someTag", "someValue"); 
sendBroadcast(intent); 
+0

Also, wenn ich keinen der Werte verändert und bin nur daran interessiert, die Werte zu lesen, sind die beiden gleichwertig? – GrandAdmiral

+0

ah, nein. Wenn bool in getResultExtras (bool) auf true gesetzt ist, erhalten Sie die vom vorherigen Empfänger gesendeten Werte (map) (neue leere Map wird zurückgegeben, wenn die vorherige Map null ist) und wenn sie auf false gesetzt ist, wird eine Nullmap zurückgegeben. und intent.getExtras() hat nur die Werte, die beim Start der Übertragung mit 'sendBroadcast (intent);' festgelegt wurden. Also wird die getResultExtras (bool) nicht dieselben Werte haben wie intent.getExtras()! –

1

Die Methode "BroadcastReceiver.getResultExtras" ist sinnvoll, wenn Sie mit "Context.sendOrderedBroadcast" georderte Broadcasts senden, da Sie die Ergebnismenge ändern können, um sie an den nächsten Broadcastempfänger zu senden Broadcast werden die Empfänger in einem synchronen Mather aufgerufen, eher als das asynchrone Mather der gemeinsamen Sendung "Context.sendBroadcast". Stellen Sie sich vor, Sie hätten 3 Empfänger und senden Ihnen eine georderte Sendung (vorausgesetzt, Sie setzen die Prioritäten mit der Sendung 1 als erste und dann), dann kann Empfänger 1 das Ergebnis mit dem "BroadcastReceiver.getResultExtras" erhalten "Methode und addieren Sie einige Werte, diese Werte werden vom Empfänger 2 gesehen, wenn die Sendung zu ihm erreicht und so weiter. Die "Intent.getExtras()" gibt Ihnen nur die zusätzlichen Werte der Absicht, die Ihr Broadcast-Empfänger hat.