2013-07-09 136 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://方案,但我們可以使用我所描述的方法處理它。