通过系统文件管理器后,我创建的文件管理器能够在通过ACTION_GET_CONTENT请求(例如,通过K9电子邮件客户端)时返回文件,并使用如下:
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请求时,我如何返回几个文件到K9 ?
正如我上面写的,我知道如何用K9发送几个文件,或者当K9请求时返回一个文件,但是我不知道如何在K9请求时返回几个文件。系统文件管理器返回几个文件,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);