【发布时间】:2015-03-20 18:10:24
【问题描述】:
我正在编写一个安卓应用程序。这个应用程序是建立在 Gmail 之上的。我想添加从其他应用程序附加文件的功能。我正在使用的第一个应用程序是自定义 Box 应用程序(使用 box sdk 制作)。我目前可以发送一个意图,在 Box 应用程序中打开一个活动,选择一个附件,然后返回。但是,在我的 Box-SDK 应用程序中,一旦选择了一个项目,我不知道如何将其转换为可以正确发送回我的 Gmail 应用程序(或意图的任何原始发件人)的数据。我也不知道如何将该数据发送回意图的发起者。
我知道涉及到 setResult(),但我不确定将它放在哪里或如何正确使用它来将框中选择的数据传送到电子邮件应用程序中。
目前发生的情况是它只是回到 gmail 中而没有附件并说下载已完成。
这是我目前拥有的代码:
private void onFileSelected(final int resultCode, final Intent data) {
if (Activity.RESULT_OK != resultCode) {
Toast.makeText(this, "fail", Toast.LENGTH_LONG).show();
}
else {
final BoxAndroidFile file = data.getParcelableExtra(FilePickerActivity.EXTRA_BOX_ANDROID_FILE);
AsyncTask<Null, Integer, Null> task = new AsyncTask<Null, Integer, Null>() {
@Override
protected void onPostExecute(Null result) {
Toast.makeText(MainActivity.this, "done downloading", Toast.LENGTH_LONG).show();
// Intent result2 = new Intent();
// result2.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + ));
// setResult(Activity.RESULT_OK, result2);
//// setResult(resultCode, data);
super.onPostExecute(result);
finish();
}
@Override
protected void onPreExecute() {
Toast.makeText(MainActivity.this, "start downloading", Toast.LENGTH_LONG).show();
super.onPreExecute();
}
@Override
protected Null doInBackground(Null... params) {
BoxAndroidClient client = ((HelloWorldApplication) getApplication()).getClient();
try {
File f = new File(Environment.getExternalStorageDirectory(), file.getName());
Intent result2 = new Intent();
result2.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + f.getAbsolutePath()));
setResult(Activity.RESULT_OK, data);
// setResult(resultCode, data);
System.out.println(f.getAbsolutePath());
client.getFilesManager().downloadFile(file.getId(), f, null, null);
}
catch (Exception e) {
}
return null;
}
};
task.execute();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == AUTH_REQUEST) {
onAuthenticated(resultCode, data);
}
else if (requestCode == UPLOAD_REQUEST) {
onFolderSelected(resultCode, data);
}
else if (requestCode == DOWNLOAD_REQUEST) {
onFileSelected(resultCode, data);
}
}
【问题讨论】:
-
我设法弄清楚了,通过将结果设置为一个新的意图,文件 uri 作为额外的 Intent result2 = new Intent(); result2.setData(Uri.parse("file://" + f.getAbsolutePath())); getActivity().setResult(Activity.RESULT_OK, result2);
标签: android email android-intent gmail attachment