自定义安卓文件管理器响应ACTION_GET_CONTENT请求如何返回多个文件?
响应ACTION_GET_CONTENT返回多文件的实现方法
首先判断收到的请求是否支持多选:
当接收到ACTION_GET_CONTENT请求时,先检查请求方是否开启了多选权限,代码如下:
// 读取请求方传入的多选开关参数 boolean isAllowMultiple = getIntent().getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false);
如果isAllowMultiple为true,即可按多文件逻辑返回结果,实现代码如下:
// 你的业务逻辑生成的待返回多文件Uri列表 ArrayList<Uri> uriList = ...; Intent resultIntent = new Intent(); // 塞入多文件Uri列表 resultIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList); // 授予读取权限,如需写入权限可额外添加FLAG_GRANT_WRITE_URI_PERMISSION resultIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // 设置MIME类型:如果所有文件类型统一则填对应类型,否则直接复用请求方传入的类型即可 resultIntent.setType(getIntent().getType()); // 可选兼容逻辑:针对低版本系统额外设置ClipData,保证多文件识别正常 ClipData clipData = ClipData.newRawUri(null, uriList.get(0)); for (int i = 1; i < uriList.size(); i++) { clipData.addItem(new ClipData.Item(uriList.get(i))); } resultIntent.setClipData(clipData); // 回传结果并结束页面 setResult(Activity.RESULT_OK, resultIntent); finish();
注意事项
- 多文件返回时不要调用
setData()方法,否则部分应用会优先读取data字段对应的单个Uri,忽略多文件列表 - 确保返回的所有Uri都是通过FileProvider生成的合规共享Uri,不要直接返回本地文件路径
- 该实现对K9邮件完全兼容,无需额外适配即可被正常识别
内容的提问来源于stack exchange,提问作者Luis A. Florit
相关产品推荐
相关产品推荐

