如何 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);