Android 多媒體數據庫 MediaStore 掃描文件時,**MIME Type 由文件後綴名通過內置映射表決定**,寫入 MediaStore.Files.FileColumns.MIME_TYPE 列。無後綴或未知後綴回退 "*/*"。
| 後綴 | MIME | 後綴 | MIME |
|---|---|---|---|
| .3gp | video/3gpp | .apk | application/vnd.android.package-archive |
| .mp3 | audio/mpeg | .mp4 | video/mp4 |
| .jpg/.jpeg | image/jpeg | .png | image/png |
| .gif | image/gif | .wav | audio/x-wav |
| application/pdf | .txt | text/plain | |
| .zip | application/zip | .rar | application/x-rar-compressed |
| .html/.htm | text/html | .js | application/javascript |
| .xml | text/plain | (其餘) | */* |
完整表見 frameworks/base/core/java/android/webkit/MimeTypeMap.java 的 sMimeTypes 靜態映射。
// MediaScanner.scanFile()
String mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext);
if (mime == null) mime = "*/*";
values.put(MediaStore.MediaColumns.MIME_TYPE, mime);
ContentValues.put(MediaStore.MediaColumns.MIME_TYPE, MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext))MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExt)Map<String, String> 兜底.JPG、.jpg 同樣匹配MimeTypeMap 返回 null,需自行兜底 "*/*".tar.gz)只識別最後一段 .gz