I have 3 Activities – A, B, and C.
In a nutshell, Activity A starts Activity B, then A also starts Activity C and expects a result from C, but never gets it.
Here is the application workflow:
-
Activity A is launched on app startup and starts Activity B (not for result, just startActivity()) in onCreate.
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); startActivity(new Intent(getApplicationContext(), ActivityB.class)); } -
Activity A then also starts Activity C later in code, this time for result using startActivityForResult(), and Activity A also has onActivityResult.
Intent intent = new Intent(getApplicationContext(), ActivityC.class); startActivityForResult(intent, 0);and
protected void onActivityResult(int requestCode, int resultCode, Intent data) { ... } -
Activity C uses setResult() and finish() to return some data, which should go back to Activity A, because Activity A called startActivityForResult().
Intent intent = new Intent(); intent.putExtra("encryption", encryption); setResult(56, intent); finish();
BUT the workflow falls silent at step 3 – Activity A’s onActivityResult is never called (neither is B’s for that matter), even though Activity A is the one starting C for result. Not sure if Activity B is getting in the way of A and C’s communication or what the problem could be. Any help is much appreciated.
I was never able to get this to work, so I ended up using a Handler instead to return the data to the necessary Activity.
UPDATE: After running into this again, I found out that the real reason this wasn’t working is because I had
android:noHistory="true"for the calling/receiving Activity A in the manifest. Removingandroid:noHistory="true"fixed it, but if you need it to be true, then Handlers are a good workaround.