我有两个独立的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
答案 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();
}