2016-06-28 30 views
1

Androidのソースを見ると、結果の余分なデータを含むBundleを取得する一般的な方法が2つあります。BroadcastReceiver.getResultsExtra()とIntent.getExtras()との比較

A.は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(); 
    } 
} 

を呼び出し呼び出し?ある方法が他の方法より優先される特定の状況がありますか?彼らは同等ですか?

答えて

1

getResultExtrasは()のように使用されます。

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

が異なる受信機間での情報/値を共有する

だから、あなたには、いくつかの値を入れたりgetResultExtraから返されたマップを変更します場合は()いくつかのBroadcastReceiverで、それはdocs

ごとに次の受信者に送信されます以前の受信機によって設定されるように、現在の結果に余分なデータを取得します。返されたマップに対する変更は、次の受信者に伝播されます。この例では、放送を開始しながら、intent.putExtra()を使って意思のエキストラに設定された値を返しますintent.getExtras()一方

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

だから私は、値のいずれかとAMを変更しておりません場合値を読むことにのみ興味があり、2つは同等ですか? – GrandAdmiral

+0

ああ、いいえ。 getResultExtras(bool)のboolがtrueに設定されている場合、以前の受信者から送信された値(マップ)が取得されます(前のマップがnullの場合は新しい空のマップが返されます)。 intent.getExtras()は、 'sendBroadcast(intent);'を使ってブロードキャストが開始されたときに設定された値だけを持ちます。したがって、getResultExtras(bool)はintent.getExtras()と同じ値を持ちません! –

1

"BroadcastReceiver.getResultExtras"メソッドは、次のブロードキャスト受信者に送信される結果セットを変更できるため、 "Context.sendOrderedBroadcast"で順序付けされたブロードキャストを送信しているときに意味があります(覚えておいてください受信機は、共通の放送 "Context.sendBroadcast"の非同期マザーではなく、同期マザーで呼び出される)。そのことを念頭に置いて、3つのレシーバがあり、それらに順序付きブロードキャストを送信したとします(最初にブロードキャスト1を優先し、その後に受信者1が「BroadcastReceiver.getResultExtras "メソッドを呼び出し、いくつかの値を追加します。その値は、受信者2がブロードキャストに到達したときなどに受信者2に表示されます。 "Intent.getExtras()"は、ブロードキャストレシーバーが持っているインテントの余分な値を提供します。

関連する問題