下载的文件在某些​​设备上没有扩展名

Files downloaded don't have extension on some devices

我遇到了一个非常棘手的问题。 上下文:我的应用程序旨在打开具有特殊扩展名的文件(比如 myFile.png.myapp)

当我使用 Chrome 从我的服务器下载它时,它下载正常并且我收到 "open" 提示并触发我的应用程序,但是,意图中的路径在表单内容中: //downloads/my_downloads/2136。

没有扩展名。

由于各种原因,我唯一可以发送的 MimeType 是 application/octet-stream,所以我无法知道该文件确实是一个 png。

如果我点击文件已下载的通知,一切正常。

这只发生在 Nexus 5 运行 Android 6.0.1 上,在所有其他设备上,我得到了实际的文件名并且它 运行 很顺利。

我同时设置了清单和应用内权限。

我的调查使我认为这是由于 DownloadProvider 包中的助手 class,但我不确定。

有人可以帮忙吗?

干杯

String path = "content://downloads/my_downloads/2136";

String mimeType = getContentResolver().getType(Uri.parse(path));   

我最终分析了文件的 headers 以提取文件签名并确定 MimeType。我改编了在这里找到的代码 https://github.com/Muraad/Mime-Detective.

它不是完美的但连贯的解决方法。

https://github.com/tajoumal/MimeTypeHelper/blob/master/MimeTypeHelper.java