2017-06-15 63 views
0

目前,我有一个问题需要解决。Android:StartActivityForResult为一个Activity但在另一个返回结果

我的应用程序允许另一个应用程序(让我们说A)启动我的应用程序并返回结果。

应用程序发出呼叫:

Intent sendIntent = 
getPackageManager().getLaunchIntentForPackage("com.my.package"); 

sendIntent.setAction(Intent.ACTION_SEND); 
sendIntent.setFlags(0); 
sendIntent.putExtra("amount", "20000"); 
startActivityForResult(sendIntent, 1); 

然后,我的应用程序将启动MainActivity。
然而,为了获得结果,并返回给应用程序A,我要开始另一些活动,让我们说:

MainActivity -> Activity B -> Activity C --> Activity D. 

结果可从活动C或D.活动

返回到一个应用程序

请注意:我无法使用标志FLAG_ACTIVITY_FORWARD_RESULT,因为从B到C,我称之为“startActivityForResult”。 (startActivityForResult和flag FLAG_ACTIVITY_FORWARD_RESULT不能在一起)。

你能告诉我一些如何实现这个想法吗?
非常感谢。

回答

0

找回导致你可以从MainActiviy调用b活动,如果你想拿回你应该做的去活动C,然后d

那一个,然后完成onActivityResult每个活动,并设置结果。

做到这样的,如果你要回到你的主要活动:

//in MainActivity 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Intent intent = new Intent(MainActivity.this, ActivityB.class); 
    startActivityForResult(intent, REQUEST_CODE_MAIN_ACTIVITY); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == REQUEST_CODE_MAIN_ACTIVITY && resultCode == RESULT_OK){ 
     //maybe get back to application that called you 
    } 
} 

//in Second activity 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_B); 
    Intent intent = new Intent(ActivityB.this, ActivityC.class); 
    startActivityForResult(intent, REQUEST_CODE_ACTIVITY_B); 

} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode == REQUEST_CODE_ACTIVITY_B && resultCode == RESULT_OK){ 
     setResult(RESULT_OK); 
     finish(); 
    } 
} 

,如果你可以直接调用第一应用活动d 可以拨打第一个应用程序,并关闭你的第二个应用

+0

如果您完成MainActivity并转到Activivty B.结果Cancel会立即返回到应用程序A. –

+0

不,我的意思是别的,我会写下代码,请稍候 – Meikiem

0

从你的第一个活动叫使用startActivityForResult第二活动()方法

Intent i = new Intent(this, SecondActivity.class); 
startActivityForResult(i, 1); 

在第二届活动,如果你はNT将数据发送回:

Intent returnIntent = new Intent(); 
returnIntent.putExtra("result",result); 
setResult(Activity.RESULT_OK,returnIntent); 
finish(); 

如果你不想返回数据:在您的第一个Activity类写入以下的onActivityResult()方法的代码

Intent returnIntent = new Intent(); 
setResult(Activity.RESULT_CANCELED, returnIntent); 
finish(); 

现在。

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if (requestCode == 1) { 
     if(resultCode == Activity.RESULT_OK){ 
      String result=data.getStringExtra("result"); 
     } 
     if (resultCode == Activity.RESULT_CANCELED) { 
      //Write your code if there's no result 
     } 
    } 
}//onActivityResult