2

维基百科说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扩展名的文件都是灰色的,即它们是不可选择的。我的代码中是否存在一些问题,或者 SAFIntent有一些预配置的 mime 类型,它可以使用application/gpx+xml但不属于这个集合?

4

1 回答 1

3

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

并且MimeUtils对 GPX 没有任何帮助,至少在 Android 7.0中是这样。

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

FWIW,我提交了一个功能请求以将 GPX 添加到MimeUtils.

于 2016-09-18T14:05:14.843 回答