子项finish()-es后,父项活动失去了CallingActivity

时间:2018-07-30 04:33:21

标签: android

我在进行活动及其父母时遇到麻烦。我的应用程序由外部应用程序作为“插件”启动。基本布局如下所示。

margin-left

我从External App > MyActivity_A > MyActivity_B启动MyActivity_B,如下所示:

MyActivity_A

Intent intent = new Intent(getApplicationContext(), MyActivity_B.class); intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT); intent.putExtra(AppIntents.AMOUNT, due); this.startActivity(intent); 可以选择关闭,我将其关闭,如下所示:

MyActivityB

public void onBack(View view) { finish(); } 具有以下回调:

MyActivity_A

@Override protected void onResume() { super.onResume(); String activity = this.getCallingActivity() != null ? this.getCallingActivity().getClassName() : "Null"; Utils.log(activity); } 启动MyActivity_A时,日志会打印出应用程序的程序包名称。但是,在解除External App之后调用onResume时,日志将打印MyActivity_B。我不确定为什么会这样以及如何解决。

3 个答案:

答案 0 :(得分:0)

MyActivity_B开始MyActivity_A时,您必须完成MyActivity_A;而关闭MyActivity_B时,必须开始MyActivity_A,以便获得名称CallingActivity ..

否则,您第一次使用saveInstance时需要管理它,以后可以使用该实例

答案 1 :(得分:0)

我假设您想将结果ActivityB转移到ExternalApp,而无需先通过ActivityA通过 proxying (因为您正在使用Intent.FLAG_ACTIVITY_FORWARD_RESULT)。

在这种情况下,请尝试在启动ActivityA时在ActivityB内调用finish(),然后在onBack(...)的{​​{1}}内调用setResult(RESULT_CANCELED)

最后,要在ActivityB中收到响应,您需要使用startActivityForResult(...)

启动“插件”

答案 2 :(得分:0)

请选中此Official Document for this method

它已经明确提及

注意:如果调用活动不期望结果(即未使用包含请求代码的startActivityForResult(Intent,int)形式),则调用包将为null。

在您的情况下,您正在打电话 MyActivity_A> MyActivity_B并且不要求任何结果

this.startActivity(intent);

如果您期望通过调用活动“ MyActivity_B”获得任何结果,那么只有这样才能给出调用活动的名称

您的代码应该是这样的

//From MyActivity_A
Intent intent = new Intent(getApplicationContext(), MyActivity_B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
intent.putExtra(AppIntents.AMOUNT, due);
this.startActivityForResult(intent,10);

//From MyActivity_B
Intent intent = new Intent();
intent.putExtra("test_string_data","https://www.google.com/")
setResult(RESULT_OK,intent);
finish();

//or
setResult(RESULT_CANCELED);
finish();

希望它会对您有所帮助。