2013-07-09 386 views
0

为了从我的android应用程序发送图像到服务器,我必须得到MIME类型的图像(或至少,其扩展名)。获取MIME类型的内容方案

我从ACTION_GET_CONTENT的意图中得到图像。某些应用程序(如Dropbox)发送file://方案数据,因此我可以使用MimeTypeMap.getFileExtensionFromUrl()来猜测扩展程序,但其他一些应用程序(例如Google Drive)会发送content://方案,但不允许这样做。

我试过很多东西张贴在这里,这样才:

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

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

有没有人有关于我的问题的想法?非常感谢你的帮助;)

回答

1

至于建议的@sh3psheep on Twitter,我已经试过这一点,它适用于content://方案:

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

我发现的唯一的con是,它不支持file://方案,但我们可以使用我所描述的方法处理它。