2012-01-24 14 views
7

、通知はBroadcastReceiverでrecivedときに呼び出す:なぜBroadcastReceiverでsetResultを呼び出しますか? GoogleからのC2DMサンプルコードで

setResult(Activity.RESULT_OK, null /* data */, null /* extra */);

私はsetResultは何をすべきか知りませんでした。これはAndroidのdocsで言うことです:

このブロードキャストから返されたすべての結果データを変更します。 は、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 */); 
    } 
} 

答えて

9

BroadcastReceiversetResult(...)方法、追跡のためにその超えるもの。

Activityの方法setResult(...)に精通している場合は、この方法を同じ方法でブロードキャストで考えることができます。

のみの放送と連携して動作します。しかし、その代わりに放送し、活動の場合はonActivityResult(int requestCode, int resultCode, Intent data)ようsetResult(...)メソッドをコールバックメソッドを取得するdocumentationが言う理由です、特定の順序で放送の結果を追跡するために使用されますContext.sendOrderedBroadcastを介して送信されます。すべての現在の結果データは、このメソッドに与えられた値に置き換えられます。あなたは物事があなたの放送を処理するために登録されているすべての異なるBroadcastReceiver s内のonReceive(Context, Intent)メソッドの実行中に行ってきました方法を知っている方法getResultCode()getResultData()またはgetResultExtras()を利用できることを意味し

。したがって、すべての受信者に現在実行されているコードの前に呼び出された前のBroadcastReceiverのコード実行の結果を知ることができます。

sendBroadcast(...)メソッドを定期的に呼び出すと、1人の受信者が別のスレッドを開始して同じインテントを受信する別のスレッドを開始するまで待機しない可能性があるためです。

+0

+1です。 –

-1

setResult()メソッドは、呼び出し元のIntentで使用される結果を設定します。 startActivityForResult(intent、code)を使用して他のアクティビティからカスタムレシーバを呼び出し、同じアクティビティのonActivityResult()メソッドでsetResult()メソッドがある場合にのみ、呼び出されたアクティビティから得られた結果を使用できるとしますもう一つの活動。これは、インテントでアクティビティを呼び出し、結果を同じアクティビティに戻すための単なる方法です。

-1

例:メインアクティビティでは、リクエストコードでアクティビティを開始します。あなたのメインは、このアクティビティの終了時に結果を待つ。彼の作業の終わりに

startActivityForResult (Intent intent, int requestCode); 

、新しい活動は、(結果コード(等..行わ行われ、作業Bを働く)と意図(必要ない)を設定し、終了するの呼び出しで自分自身を終了)。

void setResult (int resultCode, Intent data); 

主なアクティビティは、この結果をfunciton onActivityResult()で取得します。要求コードをチェックして、どの作業が実行されたかを知り、この作業の結果/状態を取得します。 (また、意図が待たれていた場合はデータが返されますが、データは結果コードでもあります)。

void onActivityResult(int requestCode, int resultCode, Intent data); 

私はあなたを助けました。

関連する問題