使用onActivityResult将数据从一个应用程序传递到另一个应用程序

时间:2016-01-27 16:57:41

标签: android android-intent

我正在尝试使用onActivityResult将数据从一个应用程序传递到另一个应用程序。将数据从“A”传递到“B”是可以的。但是当我尝试将字符串从B返回到A时,data.getExtras()始终返回null ... 提前致谢

我的代码:

在App A中:

public void initAppB(Context context, String packageName, String codCli){
    Intent intent = context.getPackageManager().getLaunchIntentForPackage(packageName);
    if (intent == null) {
        intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(Uri.parse("market://details?id=" + packageName));
    }
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("codCli",codCli);
    startActivityForResult(intent, 123456);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    String reg = "";
    if(requestCode == 123456) {
      if(resultCode == -1) {
        try{
            Bundle MBuddle = data.getExtras(); // >> ALWAYS RETURN NULL <<
            reg = MBuddle.getString("retorno");
        }catch(Exception e){
            log("Error: " + e.getMessage());
        }
        CommitSale(reg);
      } else {
        // error
      }
    }
}

在App B中:

....
//It's OK!! Receiving data!
Bundle extras = getIntent().getExtras();
if (extras != null) {
    codCli = extras.getString("codCli");
}

....

OnClickListener mBackListener = new OnClickListener() {
    public void onClick(View v) {
        String registro = "010000";
        Intent intent = getIntent();
        intent.putExtra("retorno",registro);
        setResult(-1, intent); // --> Forcing returning code -1 (Ok)
        finish();
    }
};

2 个答案:

答案 0 :(得分:1)

试试这个:在B:

Intent intent = getIntent();
intent.putExtra("Date",dateSelected);
setResult(RESULT_OK, intent);
finish();

而且,在A:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode==RESULT_OK && requestCode==1) {
        Bundle mBundle = data.getExtras();
        String mMessage = mBundle.getString("Date");
    }
}

答案 1 :(得分:1)

当您尝试使用startActivityForResult()

时,请尝试理解“ 围绕 返回的内容”

这里的问题是您在String中提供AppB值,就像这样

intent.putExtra("retorno",registro);

所以你应该阅读的是来自这样的数据的字符串... int AppA的onActivityResult()

data.getStringExtra("retorno");

因为你提供了一个String所以你应该期待一个String,

您的代码尝试做的是在Bundle中阅读onActivityResult(),就像这样......

Bundle MBuddle = data.getExtras();

从未由AppB提供,

如果您希望了解如何使用onActivityResult() Github

,请查看示例