获取mime类型的内容方案

时间:2013-07-09 16:44:11

标签: android mime-types file-type

为了从我的Android应用程序向服务器发送图像,我必须得到图像的mime类型(或者至少是它的扩展名)。

我从ACTION_GET_CONTENT意图中获取图像。某些应用程序(如Dropbox)会发送file://方案数据,因此我可以使用MimeTypeMap.getFileExtensionFromUrl()猜测扩展程序,但其他一些应用程序(如Google云端硬盘)会发送content://计划,但不允许这样做。

我在发布之前尝试了很多东西,比如:

AssetFileDescriptor asset = getContentResolver().openAssetFileDescriptor(getIntent().getData(), "r");
FileInputStream stream = asset.createInputStream();
String mime = URLConnection.guessContentTypeFromStream(stream); // returns null

我认为唯一的解决方法是将资产解码为Bitmap,然后生成新的压缩图像(使用Bitmap.compress()),但它会为手机添加一些工作,并且可能会改变格式/质量原始图像,所以我保留它只有在没有其他解决方案。

有没有人对我的问题有所了解?非常感谢您的帮助;)

1 个答案:

答案 0 :(得分:1)

根据@sh3psheep on Twitter的建议,我尝试了这一点,它适用于content://计划:

Uri data = getIntent().getData();
String mime = getContentResolver().getType(data); // returns correct MIME type, such as "image/png"

我发现唯一的问题是它不支持file://方案,但我们可以使用我所讨论的方法来处理它。