android - startActivityForResult() 不适用于外部 Activity

标签 android android-intent android-activity

这不是一个重复的问题。我只找到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 始终在新任务中启动,无论任何 launchModetaskAffinity 或标志如何。

每当我做这样的事情时,

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/

相关文章:

java - 抽屉菜单未显示在 ViewPager + ActionBar.Listener 中

android - LinearLayout 中元素间距的最佳实践

android - 自定义 Mapbox fragment 信息布局

android - GET_CONTENT Intent 在调试中有效,但在发布版本中无效

java - 有哪些方法可以以编程方式检测 Android 操作系统中的漏洞?

android - 通过 Android Intent 共享 Unicode 文本在 Whatsapp 上被截断

android bundleRelease 不签署 aab

android - 实现后的 OnBackPressed 将我带回之前的 Activity

android - Android : what UI choices? 中的新游戏 Activity

java - 正确地从非 Activity 类开始一个 Intent