2012-01-24 22 views
7

中,谷歌的C2DM示例代碼,當通知在廣播接收器recived他們稱之爲:爲什麼在BroadcastReceiver中調用setResult?

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

我不知道的setResult做什麼。這是他們在Android文檔中所說的內容:

更改從此廣播返回的所有結果數據;只有 適用於通過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

setResult(...)方法BroadcastReceiver,它比什麼都進行跟蹤。

如果您熟悉Activity的方法setResult(...),您可以用相同的方式在廣播中考慮此方法。而是獲得一個回調方法,就像在活動的情況下onActivityResult(int requestCode, int resultCode, Intent data),廣播setResult(...)方法用於跟蹤廣播的結果,按照一定的順序,這就是爲什麼documentation說:

與廣播只適用通過Context.sendOrderedBroadcast發送。所有當前的結果數據都被賦予此方法的值替換。

,這意味着你可以使用的方法getResultCode()getResultData()getResultExtras()知道在所有不同的BroadcastReceiver的註冊來處理您的廣播的東西onReceive(Context, Intent)方法的執行過程中如何去。因此,您可以知道前一個BroadcastReceiver中的代碼執行結果,該代碼在當前沿所有接收器執行的代碼執行之前調用。

它只說Context.sendOrderedBroadcast(),因爲定期調用sendBroadcast(...)方法可能不會等待1個接收方完成其執行,然後再啓動另一個線程在其他接收方執行代碼,以偵聽同樣的意圖。

+0

+1說明.. –

-1

setResult()方法設置要在調用Intent中使用的結果。假設您已經使用startActivityForResult(intent,code)從其他任何活動中調用了您的自定義接收器,然後在同一活動的onActivityResult()方法中,您可以使用從被調用活動中獲得的結果(僅當存在setResult另一項活動。這只是一種通過意圖調用活動並將結果返回到同一活動的方式。

-1

示例:在您的主要活動中,您使用請求代碼啓動活動。你的主要等待這個活動結束時的結果。

startActivityForResult (Intent intent, int requestCode); 

在他工作的結束,新的活動設置一個結果代碼(合作進行的一項完成,工作乙...等)和意圖(非必要),並完成自己與調用來完成( )。

void setResult (int resultCode, Intent data); 

您的主要活動獲取此結果的功能onActivityResult()。它會檢查請求代碼,以瞭解哪些工作已執行並獲取此工作的結果/狀態。 (和數據,如果有等待的意圖,但數據也可以是結果代碼)。

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

希望我幫了你。

相關問題