首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Android 檔案類型與 MIME 對照表:完整實作指南與程式碼範例

     編輯:Java 程式設計入門

在 Android 開發檔案管理器或需喚起其他 App 開啟檔案時,正確的 MIME 類型判斷至關重要。本文提供完整的「副檔名 → MIME」對照表,並封裝為可直接落地的工具類。

核心概念:MIME 與 Android Intent

  • MIME (Multipurpose Internet Mail Extensions):原用於郵件附件類型標識,現為網路資源類型通用標準。
  • Android 機制:系統依 Intent.ACTION_VIEW + setDataAndType(Uri, mime) 尋找支援該 MIME 的 Activity,若有多個則彈出選擇器。

工具類實作:getMIMEType() + openFile()

public class FileUtil {
    /** 根據副檔名取得 MIME 類型 */
    public static String getMIMEType(File file) {
        String type = "*/*"; // 預設未知二進位
        String name = file.getName().toLowerCase(Locale.ROOT);
        int dot = name.lastIndexOf('.');
        if (dot < 0) return type;
        String ext = name.substring(dot); // 含小數點,如 ".pdf"
        
        for (String[] pair : MIME_MAP) {
            if (ext.equals(pair[0])) return pair[1];
        }
        return type;
    }

    /** 喚起系統選擇器開啟檔案 */
    public static void openFile(Context context, File file) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION);
        String mime = getMIMEType(file);
        // Android 7.0+ 需使用 FileProvider 取得 content:// Uri
        Uri uri = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", file);
        intent.setDataAndType(uri, mime);
        context.startActivity(intent);
    }

    // -------- 靜態對照表 (節錄常用,完整見下方) --------
    private static final String[][] MIME_MAP = {
        {".3gp", "video/3gpp"}, {".apk", "application/vnd.android.package-archive"},
        {".pdf", "application/pdf"}, {".png", "image/png"}, {".jpg", "image/jpeg"},
        {".mp4", "video/mp4"}, {".mp3", "audio/mpeg"}, {".zip", "application/zip"},
        {".txt", "text/plain"}, {".html", "text/html"}, {".doc", "application/msword"},
        {".xls", "application/vnd.ms-excel"}, {".ppt", "application/vnd.ms-powerpoint"},
        // ... 完整表見下方
    };
}

完整 MIME 對照表 (100+ 常見格式)

副檔名MIME 類型
.3gpvideo/3gpp
.apkapplication/vnd.android.package-archive
.asfvideo/x-ms-asf
.avivideo/x-msvideo
.binapplication/octet-stream
.bmpimage/bmp
.c / .cpp / .htext/plain
.classapplication/octet-stream
.docapplication/msword
.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
.exeapplication/octet-stream
.gifimage/gif
.gzapplication/gzip
.htm / .htmltext/html
.jarapplication/java-archive
.javatext/plain
.jpeg / .jpgimage/jpeg
.jsapplication/javascript
.jsonapplication/json
.mp3audio/mpeg
.mp4video/mp4
.pdfapplication/pdf
.pngimage/png
.ppt / .pptxapplication/vnd.ms-powerpoint / application/vnd.openxmlformats-officedocument.presentationml.presentation
.rarapplication/x-rar-compressed
.txttext/plain
.xls / .xlsxapplication/vnd.ms-excel / application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.xmltext/xml (或 application/xml)
.zipapplication/zip
(未知)*/*
維護提示:表格會隨 Android 版本與新檔案格式更新,建議專案中維護一份 mime.properties 資源檔,運行時載入,便於熱更新。

Android 7.0 (API 24) 適配關鍵

嚴格模式禁止 file:// Uri 跨應用傳遞,必須使用 FileProvider 產生 content:// Uri:

<!-- AndroidManifest.xml -->
<provider
    android:name="androidx.core.content.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

<!-- res/xml/file_paths.xml -->
<paths>
    <files-path name="internal_files" path="." />
    <external-path name="external_files" path="." />
</paths>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved