0

为了从我的 android 应用程序将图像发送到服务器,我必须获取图像的 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()),但它会给手机增加一些工作,它可能会改变原始图像的格式/质量,所以我保留它只有在没有其他解决方案的情况下。

有人知道我的问题吗?非常感谢您的帮助;)

4

1 回答 1

1

正如Twitter 上的@sh3psheep所建议的,我已经尝试过了,它适用于content://方案:

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

我发现的唯一缺点是它不支持file://方案,但我们可以使用我在问题中描述的方法来处理它。

于 2013-07-10T10:34:57.097 回答