Android 如何允许在文件选择器 Intent 中选择 CSV
How to allow selection of CSV in a File Chooser Intent in Android
经过一天的努力,我发现这段代码“几乎”有效:
private fun showFileChooser() {
val mimeTypes = arrayOf(
"text/csv",
"text/plain",
"application/csv",
"application/vnd.ms-excel",
"application/excel",
"application/x-excel",
"application/x-msexcel"
)
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "text/csv" //if (mimeTypes.size == 1) mimeTypes[0] else "*/*"
if (mimeTypes.isNotEmpty())
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes)
startActivityForResult(
Intent.createChooser(intent, "choose file"),
MY_RESULT_CODE_FILECHOOSER
)
}
问题是 *.csv
个文件不能 selected/opened(this 是为另一个问题截取的屏幕截图,您可以在其中看到文件的显示方式...它是浅灰色的就像它被禁用一样,实际上它不能被 selected)
感谢 mime 类型 text/plain
我能够 select *.txt
文件。
我在 Whosebug 上发现了很多帖子,其中的建议不起作用(可能不再起作用)。
有什么解决办法吗?
问候
使用EXTRA_MIME_TYPES
时需要调用setType("*/*")
。请参阅共同意图的 OpenFile 部分。
此外,您应该考虑使用 Activity Results API instead of startActivityForResult()
since it provides more type safety and the latter has been deprecated. The one you are looking for is ActivityResultContracts.GetContent
经过一天的努力,我发现这段代码“几乎”有效:
private fun showFileChooser() {
val mimeTypes = arrayOf(
"text/csv",
"text/plain",
"application/csv",
"application/vnd.ms-excel",
"application/excel",
"application/x-excel",
"application/x-msexcel"
)
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
intent.type = "text/csv" //if (mimeTypes.size == 1) mimeTypes[0] else "*/*"
if (mimeTypes.isNotEmpty())
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes)
startActivityForResult(
Intent.createChooser(intent, "choose file"),
MY_RESULT_CODE_FILECHOOSER
)
}
问题是 *.csv
个文件不能 selected/opened(this 是为另一个问题截取的屏幕截图,您可以在其中看到文件的显示方式...它是浅灰色的就像它被禁用一样,实际上它不能被 selected)
感谢 mime 类型 text/plain
我能够 select *.txt
文件。
我在 Whosebug 上发现了很多帖子,其中的建议不起作用(可能不再起作用)。
有什么解决办法吗?
问候
使用EXTRA_MIME_TYPES
时需要调用setType("*/*")
。请参阅共同意图的 OpenFile 部分。
此外,您应该考虑使用 Activity Results API instead of startActivityForResult()
since it provides more type safety and the latter has been deprecated. The one you are looking for is ActivityResultContracts.GetContent