2012-01-24 10 views
7

w przykładowym kodzie C2DM z Google, gdy zgłoszenie otrzymało w BroadcastReceiver nazywają:Dlaczego wywołać setResult w BroadcastReceiver?

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

nie wiedziałem co zrobić setResult. tak mówią w dokumentach systemu Android:

Zmień wszystkie dane wynikowe zwrócone z tych programów; tylko działa z transmisjami wysyłanymi przez Context.sendOrderedBroadcast. Wszystkie bieżące dane wynikowe zostaną zastąpione wartością podaną w tej metodzie.

Czy ktoś może wyjaśnić, co oznaczają i dlaczego muszę to nazwać?

Kompletny kod:

public class C2DMBaseReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     C2DMReceiver.runIntentInService(); 
     setResult(Activity.RESULT_OK, null /* data */, null /* extra */); 
    } 
} 

Odpowiedz

9

Sposób setResult(...) w BroadcastReceiver jej bardziej niż cokolwiek do celów śledzenia.

Jeśli znasz metodę setResult(...), możesz pomyśleć o tej metodzie w transmisji w taki sam sposób. Ale zamiast się metody wywołania zwrotnego jak onActivityResult(int requestCode, int resultCode, Intent data) w przypadku działań, nadawane setResult(...) metoda służy do śledzenia wyników programów w określonym porządku, to dlaczego documentation mówi:

Działa tylko z audycji wysłane przez Context.sendOrderedBroadcast. Wszystkie bieżące dane wynikowe zostają zastąpione wartością podaną dla tej metody.

Co oznacza, że ​​można skorzystać z metod getResultCode(), getResultData() lub getResultExtras() znać jak poszło podczas wykonywania metody onReceive(Context, Intent) we wszystkich inny BroadcastReceiver s zarejestrowanym obsługiwać transmisję. Możesz więc znać wynik wykonania kodu w poprzednim BroadcastReceiver, który jest wywoływany przed aktualnie wykonanym na wszystkich odbiornikach.

Podano tylko Context.sendOrderedBroadcast(), ponieważ zwykłe wywołanie metody sendBroadcast(...) może nie czekać na zakończenie przez jednego odbiorcę jego wykonania przed uruchomieniem kolejnego wątku, aby wykonać kod w innym odbiorniku, słuchając również tego samego zamiaru.

+0

+1 dla wyjaśnienia .. –

-1

Metoda setResult() ustawia wynik, który ma być użyty w intencji wywołującej. Przypuśćmy, że wywołałeś swój niestandardowy odbiornik z dowolnej innej aktywności używając startActivityForResult (intent, code), a następnie w metodzie onActivityResult() w tej samej aktywności możesz użyć wyników uzyskanych z wywołanej aktywności, tylko jeśli istnieje metoda setResult() w inna aktywność. Jest to po prostu sposób na wywołanie działania za pomocą intencji i uzyskanie wyników z powrotem do tego samego działania.

-1

Przykład: w głównej działalności rozpoczynasz działanie z kodem żądania. Twoja główna osoba oczekuje wyniku na końcu tej czynności.

startActivityForResult (Intent intent, int requestCode); 

Pod koniec swojej pracy, nowa aktywność ustawia kod wynik (pracować zrobione, wykonanej pracy B ... itd) i intencji (nie jest to konieczne), a kończy się z rozmowy, aby zakończyć ().

void setResult (int resultCode, Intent data); 

Twoja główna działalność uzyskuje ten wynik dzięki funkcji onActivityResult(). Sprawdza kod żądania, aby dowiedzieć się, która praca została wykonana i uzyskać wynik/stan tej pracy. (i dane, jeśli oczekiwano intencji, ale dane mogą być również kodem wynikowym).

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

Mam nadzieję, że ci pomogłem.

Powiązane problemy