使用ActivityResultLauncher无法筛选CSV文件问题求助
解决ActivityResultLauncher筛选CSV文件失效的问题
问题原因
Libre Office Calc生成的CSV文件,被系统识别的MIME类型不一定是标准的text/csv,可能是text/plain或者application/csv,导致单一指定text/csv时无法匹配,文件呈灰色不可选中。
解决方案
通过指定多个CSV相关的MIME类型来覆盖不同工具生成的文件,既能过滤非CSV文件,又能选中LibreOffice生成的目标文件:
- 调整Launcher的启动参数,传入包含多种MIME类型的字符串数组:
// 注册ActivityResultLauncher ActivityResultLauncher<String[]> myActivityResultLauncher = registerForActivityResult( new ActivityResultContracts.GetContent(), uri -> { if (uri != null) { // 处理选中的CSV文件逻辑 } } ); // 启动文件选择器,传入多MIME类型数组 myActivityResultLauncher.launch(new String[]{"text/csv", "text/plain", "application/csv"});
补充说明
不同操作系统、文件生成工具对CSV文件的MIME类型标注存在差异,同时指定text/csv、text/plain、application/csv这三种最常见的类型,基本能覆盖绝大多数场景下的CSV文件,同时避免出现*/*那样无差别允许所有文件的情况。
内容的提问来源于stack exchange,提问作者Zelig
相关产品推荐
相关产品推荐

