まず、関連する質問のすべての回答が私の問題を解決しなかったので、私は新しい質問を作成しています。複数のチェーンアクティビティでonActivityResultがnullを返すたびに
私は2つのアプリを持っています。最初のアプリから、私はというURIでACTION_VIEW
のインテントを呼び出しています。
2番目のアプリでは、同じURIのインテントフィルタを設定しました。
アクティビティBから、私はonActivityResult
でApp2のアクティビティCを呼び出しています。
アクティビティCからアクティビティDをonActivityResult
と呼んでいます。
アクティビティDで作業した結果、バンドル内のデータで結果が設定され、結果がOKに設定されます。
アクティビティCでこのデータを取得するのではなく、バンドル内のデータがnullのアクティビティBを対象としています。
アクティビティBは、App1のアクティビティAに同じ応答を送信しています。したがって、私はApp1にもnullデータを取得しています。要求の中で
、それに応答して
App1 (Activity A) ---> App2 (Activity B) ---> Activity C ---> Activity D
、
Expected : App1 (Activity A) <--- App2 (Activity B) <--- Activity C <--- Activity D
Actual : App1 (Activity A) <--- App2 (Activity B) <--- Activity D
with data as null.
は親切のApp1のアクティビティAにApp2の活動のDからデータを取得するために私を助けて。
CODE:
App1のアクティビティA:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(deepLinkUrl));
Intent chooser = Intent.createChooser(intent, title);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(chooser, 1);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (data.getExtras() != null) {
Log.e("onActivityResult", "responseIntent.getExtras() " +
data.getExtras());
}
}
}
App2のアクティビティB:
Constants.deeplinkUri = getIntent().getData();
Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
intent.setData(Uri.parse(Constants.deeplinkUri));
startActivityForResult(intent, 100);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100) {
if (data.getExtras() != null) {
Log.e("onActivityResult", "responseIntent.getExtras() " +
data.getExtras());
}
setResult(Activity.RESULT_OK, data);
finish();
}
}
App2の活動C:
Intent intent = new Intent(LoginActivity.this, PayActivity.class);
intent.setData(Uri.parse(Constants.deeplinkUri));
startActivityForResult(intent, 100);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 100) {
if (data.getExtras() != null) {
Log.e("onActivityResult", "responseIntent.getExtras() " +
data.getExtras());
}
setResult(Activity.RESULT_OK, data);
finish();
}
}
App2のアクティビティD:予め
Intent returnIntent = new Intent();
returnIntent.putExtra("result", msg);
setResult(Activity.RESULT_OK, returnIntent);
finish();
おかげ。 誰でも?
まだヘルプが必要な場合は、[MCVE](http://stackoverflow.com/help/mcve)の投稿を検討してください。私はちょうどあなたの状況を再現するために2つのアプリケーションを設定し、可能な限り多くのコードを使用しています。すべてが完全に機能します(したがって、すべての要求コードが同じであれば問題ありません) – 0X0nosugar
私のプロジェクト。 – Swapnil
基本的には[this one](https://stackoverflow.com/a/37187855/5015207)と同じです。私は(B - > C)と(C - > D)の 'Intent'に' FLAG_ACTIVITY_FORWARD_RESULT'と 'startActivity()'を使用せず、代わりにあなたのコードをコピーしました。 (プラス私は自分のアクティビティAをトリガする小さなアプリを書いて、アクティビティAで 'onActivityResult()'を使ってすべてのものを他のアプリに戻していました)BTWでは、 "App2のアクティビティDから私の答えのアプローチは、あなたのユースケースの方が良いかもしれません。なぜなら、アクティビティCとBを途中でスキップするからです。 – 0X0nosugar