我正在尝试使用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();
}
};
答案 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