Sprawdź, czy działanie zostało wywołane w celu uzyskania wyniku

83

Czy można wiedzieć, czy jakaś aktywność została wywołana w celu uzyskania wyniku, użycia, startActivityForResult()czy też została dopiero rozpoczęta startActivity()?

Muszę to kontrolować, jeśli wywoływany jest wynik, zachowanie będzie inne.

TiagoM
źródło

Odpowiedzi:

166

Gdy działalność rozpoczęła właśnie przez metoda aktywności docelowej wróci .startActivity()getCallingActivity()null

Kiedy został wywołany startActivityForResult(), zwróci nazwę czynności wywołującej.

Zobacz Dokumenty dla getCallingActivity():

Zwróć nazwę działania, które wywołało to działanie. To do kogo setResult()zostaną przesłane dane. Możesz użyć tych informacji, aby potwierdzić, że odbiorca może otrzymać dane.

Uwaga: jeśli działanie wywołujące nie oczekuje wyniku (to znaczy nie używa startActivityForResult(Intent, int)formularza zawierającego kod żądania), pakiet wywołujący będzie miał wartość null.

Zwroty

ComponentName działania, na które zostanie wysłana odpowiedź, lub wartość null, jeśli jej nie ma.

lopisan
źródło
1
Jeśli rozpoczniesz działanie od: FLAG_ACTIVITY_NEW_TASK, to nie działa :( (musiałem rozpocząć aktywność logowania poza kontekstem w module obsługi błędów). Jakieś inne pomysły? Dzięki!
bentzy
to nie działa, jeśli aktywność jest uruchamiana fragmentem: fragment.getActivity (). startActivityForResult (intent, requestCode);
Mario Lenci,
@MarioLenci U mnie działa poprawnie. Nieważne, czy zacznę od działania, czy fragmentu.
Robyer
@MarioLenci, ponieważ kiedy jesteś we fragmencie, nie musisz dzwonić getActivity().startActivityFor…z fragmentu, który musisz zrobić startActivityForResultbezpośrednio.
Martin Marconcini