我如何获得具有其Uri的文件的mime类型?

Bra*_*bin 77 android uri mime-types

我有一个用画廊和相机获得的Uris列表.这些Uris是这样的:content://media/external/images/media/94.我怎么能得到它的mime类型?

Kar*_*iya 159

你可以试试

ContentResolver cR = context.getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
String type = mime.getExtensionFromMimeType(cR.getType(uri));
Run Code Online (Sandbox Code Playgroud)

编辑:

mime.getExtensionFromMimeType(cR.getType(uri)) 
Run Code Online (Sandbox Code Playgroud)

返回 - >"jpeg"

cR.getType(uri);
Run Code Online (Sandbox Code Playgroud)

返回预期值"image/jpeg".

  • ````mime.getExtensionFromMimeType(cR.getType(URI))````返回我```` "JPEG"````但是````cR.getType(URI)````回报`` ```image/jpeg"````这是期望值. (13认同)
  • 这对`file`方案不起作用. (12认同)
  • @AditiParikh [这个答案](/sf/answers/2218425401/)适合我... (2认同)

Aar*_*ron 30

此方法返回文件的扩展名(jpg,png,pdf,epub等..).

 public static String getMimeType(Context context, Uri uri) {
    String extension;

    //Check uri format to avoid null
    if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
        //If scheme is a content
        final MimeTypeMap mime = MimeTypeMap.getSingleton();
        extension = mime.getExtensionFromMimeType(context.getContentResolver().getType(uri));
    } else {
        //If scheme is a File
        //This will replace white spaces with %20 and also other special characters. This will avoid returning null values on file name with spaces and special characters.
        extension = MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new File(uri.getPath())).toString());

    }

    return extension;
}
Run Code Online (Sandbox Code Playgroud)

  • 它为我工作..我确实关注https://developer.android.com/training/sharing/receive.html (2认同)

Bha*_*ani 10

Content Uri.

ContentResolver cr = context.getContentResolver();
mimeType = cr.getType(contentUri);
Run Code Online (Sandbox Code Playgroud)

File Uri.

String fileExtension = MimeTypeMap.getFileExtensionFromUrl(fileUri
            .toString());
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
            fileExtension.toLowerCase());
Run Code Online (Sandbox Code Playgroud)

在这两方面,工程Content以及File.

public String getMimeType(Context context, Uri uri) {
    String mimeType = null;
    if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
        ContentResolver cr = context.getContentResolver();
        mimeType = cr.getType(uri);
    } else {
        String fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri
                .toString());
        mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
                fileExtension.toLowerCase());
    }
    return mimeType;
}
Run Code Online (Sandbox Code Playgroud)


Moh*_*him 8

而不是这个:

String type = mime.getExtensionFromMimeType(cR.getType(uri));
Run Code Online (Sandbox Code Playgroud)

做这个:

String type = cR.getType(uri);
Run Code Online (Sandbox Code Playgroud)

你会得到这个:image/jpeg.

  • 仅适用于内容uris(内容://).不适用于文件uris(file://) (12认同)