这不是一个重复的问题。我只找到this问题相关,但没有任何可行的解决方案。
我有什么
我有两个由我创建的应用程序,应用程序 A 和应用程序 B。我的要求是通过单击按钮从应用程序 A 打开应用程序 B。现在,应用程序 B 将进行一些处理并向应用程序 A 返回一个小状态。这应该是可能的,不是吗?
我做了什么
Intent intent = getActivity().getPackageManager().getLaunchIntentForPackage(Config._PACKAGE);
getActivity().startActivityForResult(intent, 6699);
这将完美打开应用程序 B。现在在应用程序 B 中,
Intent returnIntent = new Intent();
returnIntent.putExtra("STATUS", statusCode);
setResult(RESULT_OK, returnIntent);
finish();
这是我在 Activity 上的 onActivityResult()
方法。不过,我是从 fragment 启动 Activity 的。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "ON ACTIVITY RESULT");
if (requestCode == 6699) {
if (resultCode == RESULT_OK) {
Log.d(TAG, "RESULT OK");
}
if (resultCode == RESULT_CANCELED) {
Log.d(TAG, "RESULT NOT OK");
}
}
}
问题
当我使用 RESULT_CANCELLED 启动应用程序 B 的 Activity 时,
这怎么可能?是因为这是新任务吗?onActivityResult()
就会被调用。
但是当我在应用程序 B 上调用 finish()
时,它会关闭并将我带回应用程序 A,但这次没有调用 onActivityResult()
?我该如何解决这个问题?
这是一个非常基本的需求,应该有一个解决方案。
最佳答案
我终于解决了这个问题。
if the activity you are launching uses the singleTask launch mode, it will not run in your task and thus you will immediately receive a cancel result
这就是文档所说的。现在的想法是,如果被调用的 Activity 在新任务上启动,结果将立即取消。就我而言,我完全从另一个应用程序启动一个 Activity,该 Activity 始终在新任务中启动,无论任何 launchMode
或 taskAffinity
或标志如何。
每当我做这样的事情时,
Intent intent = getActivity().getPackageManager().getLaunchIntentForPackage(Config._PACKAGE);
getActivity().startActivityForResult(intent, 6699);
默认情况下会自动添加此标志Intent.FLAG_ACTIVITY_NEW_TASK
。因此,我们需要在开始 Activity 之前清除所有标志,
intent.setFlags(0);
在调用startActivity()
之前使用它。解决方案既简单又棘手。
关于android - startActivityForResult() 不适用于外部 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32188564/