0

我有两个独立的应用程序。应用程序 A 和应用程序 B。我想从应用程序 A 在应用程序 B 中启动活动并返回结果。我可以使用 Action 从 A 调用应用程序 B 中的活动,但在完成活动后无法返回应用程序 A。A 中的 OnActivityResult 永远不会被调用。以下是代码。

public void onClickBtnToApplicationB(View v) {
        try {
            final Intent intent = new Intent(Intent.ACTION_MAIN, null);
            final ComponentName cn = new ComponentName("pakacagename","package.class");
            intent.setComponent(cn);
            intent.setAction(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_LAUNCHER);

            startActivityForResult(intent, REQUEST_CODE);
        } catch (ActivityNotFoundException e) {
        //handle Exception
        } 
    }

    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        switch (requestCode) {
            case REQUEST_CODE:
               handleResult(resultCode, intent);
               break;
        }
    }

    public void handleResult(int resultCode, Intent intentResult) {
        switch (resultCode) {
            case RESULT_OK:
                String Result = intentResult.getStringExtra("RESULT");
                // I need Results from Application B here..
                break;

             case RESULT_CANCELED:
                break;
        }
      }

应用 B:

Intent s = new Intent(1.this,2.class);
startActivityForResult(s, REQUEST_CODE_B);
protected void onActivityResult(int requestCode, int resultCode, Intent intentResult) {     
    switch(requestCode){
        case REQUEST_CODE_B:
            handleResult(resultCode, intentResult);
    }
}

public void handleResult(int resultCode, Intent intentResult) {
    switch (resultCode) {
    case RESULT_OK:
        String scanResult = intentResult.getStringExtra("RESULT");
        Intent newintent = new Intent();
        newintent.putExtra("RESULT", scanResult);
        setResult(Activity.RESULT_OK, newintent);
        finish();
        break;

    case RESULT_CANCELED:
        break;
}
4

1 回答 1

1

也许我错过了一些东西。应用程序 A 似乎在应用程序 B 中启动一个 Activity 以获得结果并实现 onActivityResult。您构建 Intent to send 的方式存在一些问题,但让我们暂时跳过它。

据我所知,您发送的 Intent 的形式无关紧要,因为应用程序 B 从不查看它。接收 Activity 应该调用 getIntent()。根据传入的ACTION,设置结果码并返回Intent,调用setResult(),然后调用finish()。您的代码没有这样做;相反,您似乎正在尝试通过调用 startActivityForResult() 来启动应用程序 A。

我理解你为什么尝试过这个,但顺序应该是:

  1. Activity A 想要启动 Activity B(不管 Activity B 的应用程序)。
  2. 活动 A 构造与活动 B 匹配的 Intent X。
  3. 活动 A 调用 startActivityForResult( X )。
  4. 活动 B 出现在前台。
  5. Activity B 中的 onResume() 方法调用 getIntent()。这确保了即使 B 已经在运行,Activity B 也可以查看 Intent X。
  6. 活动 B 执行活动 A 请求的操作。
  7. 完成后,活动 B 将其结果放入 Intent Y中。
  8. 活动 B 调用 setResult(result_code, Y );
  9. Activity B 调用 finish(),它将结果发送回 Activity A。
  10. Activity中的onActivityResult()方法被触发。

结果 Intent Y不是 startActivityForResult 发送的;相反,它是通过 setResult() 和 finish() 的组合发送的。

于 2013-08-01T20:30:07.200 回答