如何 return 多个文件 ACTION_GET_CONTENT?
How to return several files for ACTION_GET_CONTENT?
通过系统文件管理器后,我制作的文件管理器能够在通过ACTION_GET_CONTENT询问(例如,通过K9电子邮件客户端)时return一个文件:
Uri uri = SearchOut.getUriFromFile(this, context.getPackageName(), file);
Intent intent = new Intent();
intent.setDataAndType(uri, getContentResolver().getType(uri));
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
setResult(Activity.RESULT_OK, intent);
K9正常获取文件
我的文件管理器也可以共享多个文件:
ArrayList<Uri> urilist = ...
Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, urilist);
shareIntent.setType("application/octet-stream");
context.startActivity(Intent.createChooser(shareIntent, "Sharing files..."));
然后我可以打开K9并加载所有文件。
那么,当通过 ACTION_GET_CONTENT 请求时,我如何 return 向 K9 发送多个文件?
正如我上面写的,我知道如何用K9发送多个文件,或者当K9询问时return 1个文件,但我不知道如何在K9询问时return多个文件.系统文件管理器会 return 多个文件,K9 会愉快地加载所有这些文件。
我使用 ClipData
解决了这个问题(需要 API >= 16)。不过不确定这是否是构建 ClipData 的最佳方式:
ClipData clipData = null;
for (Uri u : getSelectedFilesToArrayOfUri()) {
if (clipData == null)
clipData = ClipData.newRawUri(null, u);
else
clipData.addItem(new ClipData.Item(u));
}
intent.setClipData(clipData);
intent.setType("application/octet-stream");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
setResult(Activity.RESULT_OK, intent);
通过系统文件管理器后,我制作的文件管理器能够在通过ACTION_GET_CONTENT询问(例如,通过K9电子邮件客户端)时return一个文件:
Uri uri = SearchOut.getUriFromFile(this, context.getPackageName(), file);
Intent intent = new Intent();
intent.setDataAndType(uri, getContentResolver().getType(uri));
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
setResult(Activity.RESULT_OK, intent);
K9正常获取文件
我的文件管理器也可以共享多个文件:
ArrayList<Uri> urilist = ...
Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, urilist);
shareIntent.setType("application/octet-stream");
context.startActivity(Intent.createChooser(shareIntent, "Sharing files..."));
然后我可以打开K9并加载所有文件。
那么,当通过 ACTION_GET_CONTENT 请求时,我如何 return 向 K9 发送多个文件?
正如我上面写的,我知道如何用K9发送多个文件,或者当K9询问时return 1个文件,但我不知道如何在K9询问时return多个文件.系统文件管理器会 return 多个文件,K9 会愉快地加载所有这些文件。
我使用 ClipData
解决了这个问题(需要 API >= 16)。不过不确定这是否是构建 ClipData 的最佳方式:
ClipData clipData = null;
for (Uri u : getSelectedFilesToArrayOfUri()) {
if (clipData == null)
clipData = ClipData.newRawUri(null, u);
else
clipData.addItem(new ClipData.Item(u));
}
intent.setClipData(clipData);
intent.setType("application/octet-stream");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
setResult(Activity.RESULT_OK, intent);