2013-03-23 89 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