2012-04-28 12 views
5

Wdrażam Activity X. Mam PendingIntent P z Service S. Wiem na pewno, że P wskazuje na nieznanyActivity Y, który zwraca wynik R poprzez jego metodę setResult.Rozpoczęcie oczekiwania na osiągnięcie wyniku

Jak powinienem zacząć P w X, aby otrzymać wynik R w X.onActivityResult?

+0

PS. Podobnie jak w przypadku zwykłego wywołania 'startActivityFotResult', chciałbym również otrzymać powiadomienie, gdy Y zostanie anulowane (R jest równe' RESULT_CANCELED' w tym przypadku). – wrygiel

Odpowiedz

-1

Spędziłem trochę czasu kopania ten problem i mój wniosek jest taki, że jest niemożliwe bez pewnych zmian w obu Działalności (XiY):

W Activity X:

  • Powinieneś utworzyć jeszcze jeden PendingIntent (P2), tym razem w kontekście Activity X, używając X.createPendingResult. Teraz wysyłanie danych przez P2 spowoduje wywołanie X.onActivityResult.
  • Powinieneś dołączyć PendingIntent P2 jako dodatkową z PendingIntent P przed send.

W Activity Y:

  • Należy wyodrębnić PendingIntent P2 od jego getIntent().
  • Nie powinieneś dzwonić pod numer setResult, ale ustawić wyniki w niektórych lokalnych polach.
  • Powinieneś przesłonić onDestroy i wysłać tam stamtąd PendingIntent P2.

Dlaczego tak się dzieje?

Sądzę, że to coś w rodzaju bezpieczeństwa. Activity Y można uruchomić w oddzielnym zadaniu (niż Activity X). Być może setResult jest przeznaczony do obsługi przekazywania wyników tylko w ramach tego samego zadania? Definicję zadania można znaleźć na stronie here.

+0

Odpowiedziałem na własne pytanie. Nie jestem ekspertem i mogę być nie tak. Być może nierozsądnie jest przyjąć tę odpowiedź, dopóki ktoś jej nie potwierdzi. – wrygiel

5

Google Play Services korzysta PendingIntent obiektów, aby rozwiązać błędy uprawnienia w ten sam scenariusz:

IntentSender intentSender = pendingIntent.getIntentSender(); 
activity.startIntentSenderForResult(intentSender, REQUEST_CODE, null, 0, 0, 0); 

Zobacz Activity.startIntentSenderForResult() dokumentacji.

Powiązane problemy