2013-03-23 86 views
6

首先我試圖實現的一些背景 -確定由意圖返回的android中的uri的MIME類型?

我正在開發一個圖像共享應用程序,我需要用戶從文件系統中選擇一個圖像。

對於這一點,我使用此代碼 -

Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT); 
    photoPickerIntent.setType("image/*"); 
    startActivityForResult(photoPickerIntent, REQUEST_CODE_IMAGE_PICKER_INTENT); 

現在,這觸發選擇器,其中我看到多個選項,包括美術館,文件管理器應用程序,我有我的電話。如果我選擇圖庫並從那裏選擇一個圖像,那麼我的活動會收到一個含有圖像內容的意圖。 但是,如果我選擇FileManager應用程序,我可以選擇任何可能不是圖像的文件。所以,我需要的是能夠確定在意圖中返回的uri的MIME類型。 intent的getType方法返回null。

有什麼方法可以從返回的意圖中確定MIME是否能夠確定內容是否是圖像。

如果這不起作用,那麼我可能不得不使用MimeTypeMap來確定文件擴展名中的mime。

回答

17

我找到了一種獲取內容uri的mime類型的方法,但是對於其他類型的uri,例如形如'file:// .....'的形式的uri,沒有任何工作。

要獲得內容的URI的MIME類型 -

ContentResolver cr = this.getContentResolver(); 
    String mime = cr.getType(YOUR_CONTENT_URI); 

這僅適用於內容的URI。所以對於其他的uri,我使用MimeTypeMap來從文件擴展名推斷他們的mime類型。

+0

我嘗試同樣的,我的'onActivityResult內()','不過的getType(data.getData())'返回我空 – NarendraJi 2017-06-30 10:35:37

4

,如果你有URI,那麼你可以得到的MIME類型一樣

Uri uri = Uri.fromFile(file); 
ContentResolver cR = context.getContentResolver(); 
String mime = cR.getType(uri); 

,或者嘗試 // URL =文件路徑或任何適當的URL你想要的。

public static String getMimeType(String url) 
{ 
    String type = null; 
    String extension = MimeTypeMap.getFileExtensionFromUrl(url); 
    if (extension != null) { 
     MimeTypeMap mime = MimeTypeMap.getSingleton(); 
     type = mime.getMimeTypeFromExtension(extension); 
    } 
    return type; 
} 

詳情see these Answers