无法通过存储访问框架加载具有 .gpx 扩展名的文件

The file with the .gpx extension can not be loaded via Storage Access Framework

Wikipedia says GPX 文件的 MIME 类型是 application/gpx+xml。所以我使用了以下代码:

startActivityForResult(
    new Intent(Intent.ACTION_OPEN_DOCUMENT)
        .addCategory(Intent.CATEGORY_OPENABLE)
        .setType("application/gpx"),
        READ_GPX_FILE_REQUEST_CODE
);

也试过这个:

startActivityForResult(
    new Intent(Intent.ACTION_OPEN_DOCUMENT)
        .addCategory(Intent.CATEGORY_OPENABLE)
        .setType("application/gpx+xml"),
        READ_GPX_FILE_REQUEST_CODE
);

作为最后的手段,我尝试使用 Intent#setTypeAndNormalize(String) 方法。运气不好 - 当文件选择器对话框启动时,所有带有 .gpx 扩展名的文件都是灰色的,即它们是不可选择的。我的代码中是否有问题,或者 SAF 的 Intent 有一些它可以使用的预配置 mime 类型集,但 application/gpx+xml 不属于这个集?

由文档提供者决定其提供的文档的 MIME 类型。对于某些文档提供者,他们可能知道来自上游来源的文档 MIME 类型(例如,提供文档提供者的电子邮件客户端可能会从电子邮件的 MIME headers 中获取附件的 MIME 类型)。对于其他所有内容,他们将倾向于依赖 MimeTypeMap,而 MimeTypeMap 又依赖于名为 MimeUtils.

的内部 class

MimeUtils 对 GPX 没有任何影响,at least through Android 7.0

因此,您需要采纳 greenapps 的建议,使用 */*,并准备好处理解析错误。

FWIW,我提交 a feature request 以将 GPX 添加到 MimeUtils