我在进行活动及其父母时遇到麻烦。我的应用程序由外部应用程序作为“插件”启动。基本布局如下所示。
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
。我不确定为什么会这样以及如何解决。
答案 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();
希望它会对您有所帮助。