/*** 使用系统API,根据url获得对应的MIME类型*/private String getMimeTypeFromUrl(String url) {String type = null;//使用系统API,获取URL路径中文件的后缀名(扩展名)String extension = MimeTypeMap.getFileExtensionFromUrl(url);if (!TextUtils.isEmpty(extension)) {//使用系统API,获取MimeTypeMap的单例实例,然后调用其内部方法获取文件后缀名(扩展名)所对应的MIME类型type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase());}Log.i(TAG, "系统定义的MIME类型为:" + type);return type;}

注意:这里调用MimeTypeMap.getFileExtensionFromUrl(url)获取文件的后缀,调用MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase())获取文件类型对应的MIME,这里传递的后缀必须使用小写,不然类似xxx.PNG,xxx.JPG这些这样的文件,调用getMimeTypeFromExtension获取不到MIME,原因是什么呢,我们进入系统源码MimeTypeMap类中查看下这个方法getMimeTypeFromExtension。

/*** Return the MIME type for the given extension.* @param extension A file extension without the leading '.'* @return The MIME type for the given extension or null iff there is none.*/public String getMimeTypeFromExtension(String extension) {return MimeUtils.guessMimeTypeFromExtension(extension);}

这里又调用了MimeUtils类的guessMimeTypeFromExtension,这个类在libcore.net.MimeUtils下,MimeUtils.java是android系统封装好的。
源码链接:
https://android.googlesource.com/platform/libcore/+/android-4.4.4_r2.0.1/luni/src/main/java/libcore/net/MimeUtils.java

https://android.googlesource.com/platform/libcore/+/android-5.0.0_r1/luni/src/main/java/libcore/net/MimeUtils.java

上面的地址要打开的方式你应该懂的?所以这里贴下5.0.0_r1这个版本的源码

/** Copyright (C) 2010 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**      http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/
package libcore.net;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/*** Utilities for dealing with MIME types.* Used to implement java.net.URLConnection and android.webkit.MimeTypeMap.*/
public final class MimeUtils {private static final Map<String, String> mimeTypeToExtensionMap = new HashMap<String, String>();private static final Map<String, String> extensionToMimeTypeMap = new HashMap<String, String>();static {// The following table is based on /etc/mime.types data minus// chemical/* MIME types and MIME types that don't map to any// file extensions. We also exclude top-level domain names to// deal with cases like://// mail.google.com/a/google.com//// and "active" MIME types (due to potential security issues).// Note that this list is _not_ in alphabetical order and must not be sorted.// The "most popular" extension must come first, so that it's the one returned// by guessExtensionFromMimeType.add("application/andrew-inset", "ez");add("application/dsptype", "tsp");add("application/hta", "hta");add("application/mac-binhex40", "hqx");add("application/mathematica", "nb");add("application/msaccess", "mdb");add("application/oda", "oda");add("application/ogg", "ogg");add("application/ogg", "oga");add("application/pdf", "pdf");add("application/pgp-keys", "key");add("application/pgp-signature", "pgp");add("application/pics-rules", "prf");add("application/pkix-cert", "cer");add("application/rar", "rar");add("application/rdf+xml", "rdf");add("application/rss+xml", "rss");add("application/zip", "zip");add("application/vnd.android.package-archive", "apk");add("application/vnd.cinderella", "cdy");add("application/vnd.ms-pki.stl", "stl");add("application/vnd.oasis.opendocument.database", "odb");add("application/vnd.oasis.opendocument.formula", "odf");add("application/vnd.oasis.opendocument.graphics", "odg");add("application/vnd.oasis.opendocument.graphics-template", "otg");add("application/vnd.oasis.opendocument.image", "odi");add("application/vnd.oasis.opendocument.spreadsheet", "ods");add("application/vnd.oasis.opendocument.spreadsheet-template", "ots");add("application/vnd.oasis.opendocument.text", "odt");add("application/vnd.oasis.opendocument.text-master", "odm");add("application/vnd.oasis.opendocument.text-template", "ott");add("application/vnd.oasis.opendocument.text-web", "oth");add("application/vnd.google-earth.kml+xml", "kml");add("application/vnd.google-earth.kmz", "kmz");add("application/msword", "doc");add("application/msword", "dot");add("application/vnd.openxmlformats-officedocument.wordprocessingml.document", "docx");add("application/vnd.openxmlformats-officedocument.wordprocessingml.template", "dotx");add("application/vnd.ms-excel", "xls");add("application/vnd.ms-excel", "xlt");add("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "xlsx");add("application/vnd.openxmlformats-officedocument.spreadsheetml.template", "xltx");add("application/vnd.ms-powerpoint", "ppt");add("application/vnd.ms-powerpoint", "pot");add("application/vnd.ms-powerpoint", "pps");add("application/vnd.openxmlformats-officedocument.presentationml.presentation", "pptx");add("application/vnd.openxmlformats-officedocument.presentationml.template", "potx");add("application/vnd.openxmlformats-officedocument.presentationml.slideshow", "ppsx");add("application/vnd.rim.cod", "cod");add("application/vnd.smaf", "mmf");add("application/vnd.stardivision.calc", "sdc");add("application/vnd.stardivision.draw", "sda");add("application/vnd.stardivision.impress", "sdd");add("application/vnd.stardivision.impress", "sdp");add("application/vnd.stardivision.math", "smf");add("application/vnd.stardivision.writer", "sdw");add("application/vnd.stardivision.writer", "vor");add("application/vnd.stardivision.writer-global", "sgl");add("application/vnd.sun.xml.calc", "sxc");add("application/vnd.sun.xml.calc.template", "stc");add("application/vnd.sun.xml.draw", "sxd");add("application/vnd.sun.xml.draw.template", "std");add("application/vnd.sun.xml.impress", "sxi");add("application/vnd.sun.xml.impress.template", "sti");add("application/vnd.sun.xml.math", "sxm");add("application/vnd.sun.xml.writer", "sxw");add("application/vnd.sun.xml.writer.global", "sxg");add("application/vnd.sun.xml.writer.template", "stw");add("application/vnd.visio", "vsd");add("application/x-abiword", "abw");add("application/x-apple-diskimage", "dmg");add("application/x-bcpio", "bcpio");add("application/x-bittorrent", "torrent");add("application/x-cdf", "cdf");add("application/x-cdlink", "vcd");add("application/x-chess-pgn", "pgn");add("application/x-cpio", "cpio");add("application/x-debian-package", "deb");add("application/x-debian-package", "udeb");add("application/x-director", "dcr");add("application/x-director", "dir");add("application/x-director", "dxr");add("application/x-dms", "dms");add("application/x-doom", "wad");add("application/x-dvi", "dvi");add("application/x-font", "pfa");add("application/x-font", "pfb");add("application/x-font", "gsf");add("application/x-font", "pcf");add("application/x-font", "pcf.Z");add("application/x-freemind", "mm");// application/futuresplash isn't IANA, so application/x-futuresplash should come first.add("application/x-futuresplash", "spl");add("application/futuresplash", "spl");add("application/x-gnumeric", "gnumeric");add("application/x-go-sgf", "sgf");add("application/x-graphing-calculator", "gcf");add("application/x-gtar", "tgz");add("application/x-gtar", "gtar");add("application/x-gtar", "taz");add("application/x-hdf", "hdf");add("application/x-ica", "ica");add("application/x-internet-signup", "ins");add("application/x-internet-signup", "isp");add("application/x-iphone", "iii");add("application/x-iso9660-image", "iso");add("application/x-jmol", "jmz");add("application/x-kchart", "chrt");add("application/x-killustrator", "kil");add("application/x-koan", "skp");add("application/x-koan", "skd");add("application/x-koan", "skt");add("application/x-koan", "skm");add("application/x-kpresenter", "kpr");add("application/x-kpresenter", "kpt");add("application/x-kspread", "ksp");add("application/x-kword", "kwd");add("application/x-kword", "kwt");add("application/x-latex", "latex");add("application/x-lha", "lha");add("application/x-lzh", "lzh");add("application/x-lzx", "lzx");add("application/x-maker", "frm");add("application/x-maker", "maker");add("application/x-maker", "frame");add("application/x-maker", "fb");add("application/x-maker", "book");add("application/x-maker", "fbdoc");add("application/x-mif", "mif");add("application/x-ms-wmd", "wmd");add("application/x-ms-wmz", "wmz");add("application/x-msi", "msi");add("application/x-ns-proxy-autoconfig", "pac");add("application/x-nwc", "nwc");add("application/x-object", "o");add("application/x-oz-application", "oza");add("application/x-pem-file", "pem");add("application/x-pkcs12", "p12");add("application/x-pkcs12", "pfx");add("application/x-pkcs7-certreqresp", "p7r");add("application/x-pkcs7-crl", "crl");add("application/x-quicktimeplayer", "qtl");add("application/x-shar", "shar");add("application/x-shockwave-flash", "swf");add("application/x-stuffit", "sit");add("application/x-sv4cpio", "sv4cpio");add("application/x-sv4crc", "sv4crc");add("application/x-tar", "tar");add("application/x-texinfo", "texinfo");add("application/x-texinfo", "texi");add("application/x-troff", "t");add("application/x-troff", "roff");add("application/x-troff-man", "man");add("application/x-ustar", "ustar");add("application/x-wais-source", "src");add("application/x-wingz", "wz");add("application/x-webarchive", "webarchive");add("application/x-webarchive-xml", "webarchivexml");add("application/x-x509-ca-cert", "crt");add("application/x-x509-user-cert", "crt");add("application/x-x509-server-cert", "crt");add("application/x-xcf", "xcf");add("application/x-xfig", "fig");add("application/xhtml+xml", "xhtml");add("audio/3gpp", "3gpp");add("audio/aac", "aac");add("audio/aac-adts", "aac");add("audio/amr", "amr");add("audio/amr-wb", "awb");add("audio/basic", "snd");add("audio/flac", "flac");add("application/x-flac", "flac");add("audio/imelody", "imy");add("audio/midi", "mid");add("audio/midi", "midi");add("audio/midi", "ota");add("audio/midi", "kar");add("audio/midi", "rtttl");add("audio/midi", "xmf");add("audio/mobile-xmf", "mxmf");// add ".mp3" first so it will be the default for guessExtensionFromMimeTypeadd("audio/mpeg", "mp3");add("audio/mpeg", "mpga");add("audio/mpeg", "mpega");add("audio/mpeg", "mp2");add("audio/mpeg", "m4a");add("audio/mpegurl", "m3u");add("audio/prs.sid", "sid");add("audio/x-aiff", "aif");add("audio/x-aiff", "aiff");add("audio/x-aiff", "aifc");add("audio/x-gsm", "gsm");add("audio/x-matroska", "mka");add("audio/x-mpegurl", "m3u");add("audio/x-ms-wma", "wma");add("audio/x-ms-wax", "wax");add("audio/x-pn-realaudio", "ra");add("audio/x-pn-realaudio", "rm");add("audio/x-pn-realaudio", "ram");add("audio/x-realaudio", "ra");add("audio/x-scpls", "pls");add("audio/x-sd2", "sd2");add("audio/x-wav", "wav");// image/bmp isn't IANA, so image/x-ms-bmp should come first.add("image/x-ms-bmp", "bmp");add("image/bmp", "bmp");add("image/gif", "gif");// image/ico isn't IANA, so image/x-icon should come first.add("image/x-icon", "ico");add("image/ico", "cur");add("image/ico", "ico");add("image/ief", "ief");add("image/jpeg", "jpeg");add("image/jpeg", "jpg");add("image/jpeg", "jpe");add("image/pcx", "pcx");add("image/png", "png");add("image/svg+xml", "svg");add("image/svg+xml", "svgz");add("image/tiff", "tiff");add("image/tiff", "tif");add("image/vnd.djvu", "djvu");add("image/vnd.djvu", "djv");add("image/vnd.wap.wbmp", "wbmp");add("image/webp", "webp");add("image/x-cmu-raster", "ras");add("image/x-coreldraw", "cdr");add("image/x-coreldrawpattern", "pat");add("image/x-coreldrawtemplate", "cdt");add("image/x-corelphotopaint", "cpt");add("image/x-jg", "art");add("image/x-jng", "jng");add("image/x-photoshop", "psd");add("image/x-portable-anymap", "pnm");add("image/x-portable-bitmap", "pbm");add("image/x-portable-graymap", "pgm");add("image/x-portable-pixmap", "ppm");add("image/x-rgb", "rgb");add("image/x-xbitmap", "xbm");add("image/x-xpixmap", "xpm");add("image/x-xwindowdump", "xwd");add("model/iges", "igs");add("model/iges", "iges");add("model/mesh", "msh");add("model/mesh", "mesh");add("model/mesh", "silo");add("text/calendar", "ics");add("text/calendar", "icz");add("text/comma-separated-values", "csv");add("text/css", "css");add("text/html", "htm");add("text/html", "html");add("text/h323", "323");add("text/iuls", "uls");add("text/mathml", "mml");// add ".txt" first so it will be the default for guessExtensionFromMimeTypeadd("text/plain", "txt");add("text/plain", "asc");add("text/plain", "text");add("text/plain", "diff");add("text/plain", "po");     // reserve "pot" for vnd.ms-powerpointadd("text/richtext", "rtx");add("text/rtf", "rtf");add("text/text", "phps");add("text/tab-separated-values", "tsv");add("text/xml", "xml");add("text/x-bibtex", "bib");add("text/x-boo", "boo");add("text/x-c++hdr", "hpp");add("text/x-c++hdr", "h++");add("text/x-c++hdr", "hxx");add("text/x-c++hdr", "hh");add("text/x-c++src", "cpp");add("text/x-c++src", "c++");add("text/x-c++src", "cc");add("text/x-c++src", "cxx");add("text/x-chdr", "h");add("text/x-component", "htc");add("text/x-csh", "csh");add("text/x-csrc", "c");add("text/x-dsrc", "d");add("text/x-haskell", "hs");add("text/x-java", "java");add("text/x-literate-haskell", "lhs");add("text/x-moc", "moc");add("text/x-pascal", "p");add("text/x-pascal", "pas");add("text/x-pcs-gcd", "gcd");add("text/x-setext", "etx");add("text/x-tcl", "tcl");add("text/x-tex", "tex");add("text/x-tex", "ltx");add("text/x-tex", "sty");add("text/x-tex", "cls");add("text/x-vcalendar", "vcs");add("text/x-vcard", "vcf");add("video/3gpp", "3gpp");add("video/3gpp", "3gp");add("video/3gpp2", "3gpp2");add("video/3gpp2", "3g2");add("video/avi", "avi");add("video/dl", "dl");add("video/dv", "dif");add("video/dv", "dv");add("video/fli", "fli");add("video/m4v", "m4v");add("video/mp2ts", "ts");add("video/mpeg", "mpeg");add("video/mpeg", "mpg");add("video/mpeg", "mpe");add("video/mp4", "mp4");add("video/mpeg", "VOB");add("video/quicktime", "qt");add("video/quicktime", "mov");add("video/vnd.mpegurl", "mxu");add("video/webm", "webm");add("video/x-la-asf", "lsf");add("video/x-la-asf", "lsx");add("video/x-matroska", "mkv");add("video/x-mng", "mng");add("video/x-ms-asf", "asf");add("video/x-ms-asf", "asx");add("video/x-ms-wm", "wm");add("video/x-ms-wmv", "wmv");add("video/x-ms-wmx", "wmx");add("video/x-ms-wvx", "wvx");add("video/x-sgi-movie", "movie");add("video/x-webex", "wrf");add("x-conference/x-cooltalk", "ice");add("x-epoc/x-sisx-app", "sisx");applyOverrides();}private static void add(String mimeType, String extension) {// If we have an existing x -> y mapping, we do not want to// override it with another mapping x -> y2.// If a mime type maps to several extensions// the first extension added is considered the most popular// so we do not want to overwrite it later.if (!mimeTypeToExtensionMap.containsKey(mimeType)) {mimeTypeToExtensionMap.put(mimeType, extension);}if (!extensionToMimeTypeMap.containsKey(extension)) {extensionToMimeTypeMap.put(extension, mimeType);}}private static InputStream getContentTypesPropertiesStream() {// User override?String userTable = System.getProperty("content.types.user.table");if (userTable != null) {File f = new File(userTable);if (f.exists()) {try {return new FileInputStream(f);} catch (IOException ignored) {}}}// Standard location?File f = new File(System.getProperty("java.home"), "lib" + File.separator + "content-types.properties");if (f.exists()) {try {return new FileInputStream(f);} catch (IOException ignored) {}}return null;}/*** This isn't what the RI does. The RI doesn't have hard-coded defaults, so supplying your* own "content.types.user.table" means you don't get any of the built-ins, and the built-ins* come from "$JAVA_HOME/lib/content-types.properties".*/private static void applyOverrides() {// Get the appropriate InputStream to read overrides from, if any.InputStream stream = getContentTypesPropertiesStream();if (stream == null) {return;}try {try {// Read the properties file...Properties overrides = new Properties();overrides.load(stream);// And translate its mapping to ours...for (Map.Entry<Object, Object> entry : overrides.entrySet()) {String extension = (String) entry.getKey();String mimeType = (String) entry.getValue();add(mimeType, extension);}} finally {stream.close();}} catch (IOException ignored) {}}private MimeUtils() {}/*** Returns true if the given MIME type has an entry in the map.* @param mimeType A MIME type (i.e. text/plain)* @return True iff there is a mimeType entry in the map.*/public static boolean hasMimeType(String mimeType) {if (mimeType == null || mimeType.isEmpty()) {return false;}return mimeTypeToExtensionMap.containsKey(mimeType);}/*** Returns the MIME type for the given extension.* @param extension A file extension without the leading '.'* @return The MIME type for the given extension or null iff there is none.*/public static String guessMimeTypeFromExtension(String extension) {if (extension == null || extension.isEmpty()) {return null;}return extensionToMimeTypeMap.get(extension);}/*** Returns true if the given extension has a registered MIME type.* @param extension A file extension without the leading '.'* @return True iff there is an extension entry in the map.*/public static boolean hasExtension(String extension) {if (extension == null || extension.isEmpty()) {return false;}return extensionToMimeTypeMap.containsKey(extension);}/*** Returns the registered extension for the given MIME type. Note that some* MIME types map to multiple extensions. This call will return the most* common extension for the given MIME type.* @param mimeType A MIME type (i.e. text/plain)* @return The extension for the given MIME type or null iff there is none.*/public static String guessExtensionFromMimeType(String mimeType) {if (mimeType == null || mimeType.isEmpty()) {return null;}return mimeTypeToExtensionMap.get(mimeType);}
}

这里就是简单的一个键值对MIME跟文件格式的映射表,从源码中我们可以看的出来这里为什么要将文件后缀进行小写处理。
本文到此结束,下篇文章,我们再来说说Android调用系统组件获取指定格式文件的方法。

Android平台上获取文件的MIME相关推荐

  1. takephoto 框架_GitHub - Smecking/TakePhoto: 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库...

    TakePhoto是一款用于在Android设备上获取照片(拍照或从相册.文件中选择).裁剪图片.压缩图片的开源工具库,目前最新版本4.0.2. 3.0以下版本及API说明,详见TakePhoto2. ...

  2. 奥比中光Gemini 3D双目结构光深度相机在Android平台上深度数据噪点非常多的问题

    相机:Gemini 3D双目结构光深度相机 环境:Android7.1 软件:SDK中的java demo下的depthforopenni2 问题: 在Android样例depthforopenni2 ...

  3. Gemini 3D双目结构光深度相机在Android平台上深度数据噪点非常多的问题

    相机:Gemini 3D双目结构光深度相机 环境:Android7.1 软件:SDK中的java demo下的depthforopenni2 问题: 在Android样例depthforopenni2 ...

  4. 在 Android* 平台上设置原生 OpenGL ES*

    Setting up Native OpenGL ES* on Android* Platforms final.docx BSD2.0.txt ParticleSystemNDK.zip READM ...

  5. Android平台上集成萤石SDK

    这篇文章,就Android平台上如何集成萤石SDK进行讲解. 前言: 萤石是海康威视集团旗下的一家做视频云的公司.我们接入萤石设备,实现实时预览.远程回放.抓图.切换画质等功能. 关于具体如何接入,包 ...

  6. Android平台上集成海康SDK(二)

    Android平台上集成海康SDK 以上是我之前写的一篇Android平台上集成海康SDK的文章,其中对于Android平台上集成海康SDK.基于海康SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...

  7. Freeline - Android平台上的秒级编译方案

    Freeline 技术揭秘 Freeline是什么? Freeline是蚂蚁金服旗下一站式理财平台蚂蚁聚宝团队15年10月在Android平台上的量身定做的一个基于动态替换的编译方案,5月阿里集团内部 ...

  8. Android平台上集成乐橙SDK

    这篇文章,就Android平台上如何集成乐橙SDK进行讲解. 前言: 乐橙是浙江大华技术股份有限公司旗下的一家专注视频智能硬件,视频云和视频智能技术,为视频应用提供云视频能力的服务商. 我们接入乐橙设 ...

  9. Android平台上最好的几款免费代码编辑器

    概述:使用正确的开发工具能够快速有效地完成源代码的编写和测试,使编程事半功倍.这里介绍了在Android平台上5款最好的代码编辑器,帮助你作出选择. 使用正确的开发工具能够快速有效地完成源代码的编写和 ...

最新文章

  1. sql语句的简单记录
  2. python基础笔记(非系统/自用/参考小甲鱼的零基础入门学习python)下
  3. js 按钮(checkbox)控制多个checkbox的选中或不选中问题
  4. javascript --- 判断只有1个为真
  5. 怎样去理解@ComponentScan注解
  6. fckeditor异常总结---org.apache.commons.fileupload.FileUploadException
  7. Linux 内核的测试和调试(1)
  8. 步进电机可以连续运转吗?
  9. 拓端tecdat|疫情下的在线教学数据观
  10. Android触控签名软件,Android Sign Kit(app一键签名)
  11. 手游服务器源码 https,python手游服务端搭建(转)
  12. R语言画好看的聚类树
  13. 第五人格显示服务器连接失败,第五人格网络连接失败怎么回事
  14. 向量运算(点积,叉积)
  15. TP5 控制器命名大小写问题
  16. 网络安全之权限维持(持续更新)
  17. 隐藏表白技能,python教你如何使用图片exif信息隐藏表白,教你如何修改,查询exif信息。
  18. 痞子衡嵌入式:利用GPIO模块来测量i.MXRT1xxx的系统中断延迟时间
  19. 华为EROFS文件系统的性能测试
  20. 初遇初识初知接下来是什么_初识爱|《傲慢与偏见》书评

热门文章

  1. 国际象棋机器人夹断7岁男孩手指,原因是「棋手违反安全规则」?
  2. i710700f和i512400f区别 i7 10700f和i5 12400f选哪个好
  3. Windows基本信息收集
  4. 2022年全球市场线性和旋转编码器总体规模、主要生产商、主要地区、产品和应用细分研究报告
  5. linux开放端口,允许外部通过端口访问
  6. SendMail 发送邮件
  7. 基于java网上租贸系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  8. 【高编 6】 北邮 高级网络程序设计 6. JSPJavaBean
  9. Java day01
  10. 【英语美文】妥协 —— compromise will last for lifetime