startActivityForResult在不同应用程序之间传递Intent时立即返回

时间:2015-09-30 17:15:39

标签: android android-intent

我有两个独立的Android应用,即ApplicationA和ApplicationB。我希望打开ApplicationA,将一些数据输入EditText,然后将该值发送到ApplicationB。在ApplicationB中,我希望执行一些操作,然后将ApplicationB中的EditText中的值发送回ApplicationA。目前,我这样做是通过使用Intents:

    ApplicationA     ----->    ApplicationB        ----->        ApplicationB        ----->   ApplicationA

Start MainActivity in        Handle the Intent from           Perform some actions,       Handle the Intent from
ApplicaitonB, sending        ApplicationA, and read           then start MainActivity     ApplicationB, and read                                              
some data                    the Intent's data                in ApplicationA, sending    some data
                                                              some data

正如您所看到的,我正在使用一个意图来自A - > B,另一个来自B - > A.

ApplicationB's中实施MainActivity时,使用ApplicaitonA中的意图并调用startActivityForResult()似乎更容易启动onActivityResult() ApplicationA处理来自ApplicationB的回复。这样做的问题似乎是startActivityForResult() 立即返回,因此ApplicationB中的用户没有时间在将数据返回到{{1}之前执行任何操作}}。如果两个活动都在同一个应用程序中,似乎这会有效,但由于它们位于不同的应用程序中,ApplicationA总是立即返回。

这是startActivityForResult()的{​​{1}}类:

MainActivity

这是ApplicationA的{​​{1}}类:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    final EditText et = (EditText) this.findViewById(R.id.someDataInA);  

    final Button btn = (Button) this.findViewById(R.id.button);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = MainActivity.this.getPackageManager().getLaunchIntentForPackage("com.comp.ActivityB");
            MainActivity.this.startActivity(i);
        }
    });
}

以下是ApplicationA的AndroidManifest:

MainActiivty

AndroidBifest for ApplicationB:

ApplicationB

2 个答案:

答案 0 :(得分:0)

您的问题可能是应用程序正在启动新任务或清除任务堆栈。由于您获得了启动意图而没有使用IntentFilter或其他结构来定位和堆叠活动,因此startActivityForResult无效。

你应该看看这样的东西(虽然这可能超出你的需要):

Using startActivityForResult across Android applications

(您需要发布您的清单,以便更深入地了解此问题。)

答案 1 :(得分:0)

你绝对可以使用startActivityForResult()从A开始B.但是,你不想使用"启动Intent"在这样做时,因为"启动Intent"将在单独的任务中启动应用程序B. startActivityForResult()使用的机制不适用于任务。

请在应用A中尝试此操作:

    public void onClick(View v) {
        Intent i = new Intent();
        i.setClassName("com.comp.ActivityB", "com.comp.ActivityB.MainActivity");
        MainActivity.this.startActivityForResult(i);
    }

在应用B中,您可以执行以下操作,而不是将startActivity()调用回应用A:

    public void onClick(View v) {
        Intent i = new Intent();
        // Put data into the Intent to return it to calling app
        i.putExtra("name1", value1);
        i.putExtra("name2", value2); // ...
        setResult(RESULT_OK, i);
        finish();
    }