Uruchamiam działania z głównego działania w mojej aplikacji przy użyciu połączenia startActivityForResult(intent, ACTIVITY_TYPE)
i wszystkie działają z wyjątkiem jednego.
Ten, gdy zostanie wywołany, uruchamia działanie zgodnie z życzeniem, ale w dzienniku widzę, że onActivityResult()
jest uruchamiane natychmiast. Aktywność pojawia się, ale RESULT_CANCELED
jest natychmiast przywracana onActivityResult()
.
Następnie wchodzę w interakcję z działaniem, naciskam przycisk, który wywołuje finish()
, ale onActivityResult()
tym razem nie jest wywoływany (ponieważ najwyraźniej wynik został już zwrócony).
Czy to ma dla kogoś sens? Czy ktoś widział to zachowanie wcześniej?
źródło
singleTop
wydaje mi się w porządku,singleTask
jednak powodował ten problem i dlatego nasingleInstance
pewno też by to zrobiłDodatkowo upewnij się, że intencja nie ma
Intent.FLAG_ACTIVITY_NEW_TASK
zestawu.Z dokumentów :
źródło
Intent.FLAG_ACTIVITY_NEW_TASK
?Widziałem już takie zachowanie, upewnij się, że aktywność dotycząca miejsca docelowego (ta specjalna aktywność) nie znajduje się
singleInstance
w pliku AndroidManifest. Jeśli działanie ma wartośćsingleInstance
, powróciRESULT_CANCELED
przed uruchomieniem!źródło
Chciałbym również dodać, że możesz wywołać aplikację zewnętrzną za pomocą:
Intent in = caller.getPackageManager().getLaunchIntentForPackage("com.your.package.here");
Która utworzyłaby intencję z
Intent.FLAG_ACTIVITY_NEW_TASK
dodaniem domyślnie, więc zadzwoń:in.setFlags(0);
Która wyczyści tę flagę, a następnie możesz przejść do:
startActivityForResult(in, action);
Powód, dla którego to robię, jest to, że mam aplikację narzędziową, która ma wspólną funkcjonalność między kilkoma innymi aplikacjami i mogę przechowywać zmiany w kodzie w jednej lokalizacji, zamiast martwić się o wiele aktualizacji.
źródło
startActivityForResult()
nie działa z aktywnościąsingleInstance
lubsingleTask
w wersji Androida sprzed wersji Lollipop. Od Androida 5 działa (zobacz tę odpowiedź, aby uzyskać więcej informacji).źródło
Uruchamia się również, jeśli masz
FLAG_ACTIVITY_NEW_TASK
zamiar.źródło
Mój problem dotyczył dzwonienia. Jego deklaracja w AndroidManifest miała następującą właściwość:
Zmieniono go na „false” i teraz działa dobrze.
źródło
Android 4.4 ma mały problem z oczekiwaniem na powrót po zakończeniu działania Aby rozwiązać ten problem, ważne jest, aby ustawić:
TaskAffinity = "[SAME STRING]"
)launchmode=singleTop,
launchIntent.SetFlags(0); // for reset default Intent flags if you launch from package manager
To rozwiązanie działa ze wszystkimi wersjami Androida
Zobacz to dla taskAffinity: https://asyoulook.com/computers%20&%20internet/android-onactivityresult-being-called-instently/1004072
źródło
Sprawdź również, czy android: noHistory = "true" w aktywności w Manifest, jeśli tak, to nie zadziała.
źródło
Dla
ActivityGroup
lubTabHost
i innych, być możexxxActivity
jestsubActivity
jego rodzicem. WtedystartActivityForResult
nie może działać, ale rodzic może uzyskać wynik.połączenie
getParent().startActivityForResult()
z poddziałaniaTwój rodzic (ten
ActivityGroup
) będzie w stanie obsłużyćonActivityResult
. Więc stworzyłem podklasęActivityGroup
i poradziłem sobie z tymonActivityResult
.W razie potrzeby możesz przekierować wynik z powrotem do działania podrzędnego. Po prostu pobierz bieżącą aktywność
getLocalActivityManager().getCurrentActivity()
. Moje działania podrzędne dziedziczą z działania niestandardowego, więc dodałemhandleActivityResult(requestCode, resultCode, data)
w tej podklasie,ActivityGroup
aby wywołać.przykład: http://www.cnblogs.com/relinson/archive/2012/03/25/startActivityForResult.html
źródło
onActivityResult()
przejdzie równieżRESULT_CANCELED
jako,resultCode
jeśli błędnie wpiszesz nazwę pakietu lub klasy w pliku manifestu.źródło
W Android Manifest ustawiono
android:launchMode="singleTop"
działanie, które chcesz otworzyć z wynikiem i podczas otwierania ustawiono flagę działaniaintent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
źródło
Jeśli zdefiniowałeś
android:noHistory="true"
w działaniu w swoim AndroidManifest.xml, spowoduje to ten sam problem tutaj.źródło