【发布时间】:2018-01-12 17:43:40
【问题描述】:
首先,相关问题的每个答案都没有解决我的问题,这就是我创建一个新问题的原因。
我有两个应用程序。从第一个应用程序开始,我使用带有 onActivityResult 的 URI 调用 ACTION_VIEW 的意图。
在第二个应用程序中,我为同一个 URI 设置了一个意图过滤器。
现在从 Activity B,我在 App2 中使用 onActivityResult 调用 Activity C。
在活动 C 中,我使用 onActivityResult 调用活动 D。
在活动 D 中进行一些工作后,将在捆绑包中设置包含一些数据的结果并将结果设置为 OK。
我没有在 Activity C 中获取这些数据,而是在 Activity B 中获取意图,并且捆绑中的数据为 null。
而 Activity B 正在向 App1 的 Activity A 发送相同的响应。因此,我在 App1 中也得到了空数据。
在请求中,
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.
请帮助我从 App2 的 Activity D 获取数据到 App1 的 Activity A。
代码:
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。我只是设置了两个应用程序来重现您的情况,尽可能多地使用您的代码,并且一切正常(所以如果所有请求代码都相同,则没有问题)
-
你能分享这个项目,以便我可以和我的项目进行比较。
-
基本上和this one一样。我只是没有将
FLAG_ACTIVITY_FORWARD_RESULT和startActivity()与Intent一起用于(B -> C)和(C -> D),而是复制了您的代码。 (另外,我编写了一个小应用程序来触发我的 Activity A 并在 Activity A 中使用onActivityResult()将所有内容传递回另一个应用程序)顺便说一句,如果您正在寻找“从 App2 的 Activity D 获取数据到 App1 的 Activity A” ,我的回答中的方法甚至可能更适合您的用例,因为它在返回的路上会跳过活动 C 和 B。
标签: android android-intent android-activity intentfilter