【问题标题】:What are the supported file formats of getMimeTypeFromExtension() in androidandroid中getMimeTypeFromExtension()支持哪些文件格式
【发布时间】:2017-08-06 22:35:45
【问题描述】:

我正在创建一个应用程序,我想在列表视图中列出所有 pdf、docx、xlsx、pptx、txt。

这就是我到目前为止所做的。

Uri uri = MediaStore.Files.getContentUri("external");

    String[] projection ={ MediaStore.Files.FileColumns._ID,
            MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.TITLE, MediaStore.Files.FileColumns.MIME_TYPE} ;

    String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + "=?";
    String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("txt");
    String[] selectionArgsPdf = new String[]{ mimeType};
    String sortOrder = null;

    Cursor allPdfFiles = getContentResolver().query(uri, projection, selectionMimeType, selectionArgsPdf, sortOrder);


    if (allPdfFiles.moveToFirst()) {
        do {

            ImageViewInfo newVVI = new ImageViewInfo();
            int id = allPdfFiles.getInt(allPdfFiles.getColumnIndex(MediaStore.Files.FileColumns._ID));


            newVVI.filePath = allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA));
            newVVI.title = allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(MediaStore.Files.FileColumns.TITLE));
            newVVI.mimeType = allPdfFiles.getString(allPdfFiles.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MIME_TYPE));
            ImageRows.add(newVVI);
        } while (allPdfFiles.moveToNext());


        allPdfFiles.close();

    }

我在获取 docx、xlsx、pptx 等其他文件格式时遇到问题,例如当我尝试更改它时 String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension("docx"); 它总是返回 null

但是当它是getMimeTypeFromExtension("pdf")getMimeTypeFromExtension("txt") 时它工作正常。

getMimeTypeFromExtension()支持的文件格式有哪些?

我该怎么办?你能指出我在哪里做错了吗?如果可能的话,你能建议一个解决方案。先感谢您!我真的很感激。

【问题讨论】:

    标签: android listview mediastore


    【解决方案1】:

    getMimeTypeFromExtension() 支持哪些文件格式?

    这将因 Android 操作系统版本而异,如果制造商已介入并对其进行修补,则可能因设备而异。例如the definitions from 7.1.2those from 4.1.2不同,比如7.1.2有webp

    我该怎么办?

    将它们硬编码到您自己的应用中。

    【讨论】:

    • 谢谢你!阅读您的评论后,我尝试在其他设备上运行我的应用程序,两者都在 Android lollipop 上运行,但品牌不同。在我的结论中,这实际上取决于制造商。你在这方面启发了我,非常感谢!对此,我真的非常感激。所以我要对它们进行硬编码,我该怎么做?可以举个例子吗?
    • @asgardwin7:嗯,嗯,MIME 类型只是字符串。因此,请在代码中提供您自己的定义。 MimeTypeMap 更适用于在编译时不知道文件类型的情况。
    • 嗯,当我在另一台运行 android 6.0 的 android 设备上尝试它时,这行出现错误 Cursor allPdfFiles = getContentResolver().query(uri, projection, selectionMimeType, selectionArgsPdf, sortOrder); 我应该在这里创建另一个帖子来问这个问题吗?跨度>
    • 我在网上搜索了一下,发现android 6.0不支持媒体查询link
    • @asgardwin7:“媒体查询”是指 Web 开发和 CSS,与您的问题无关。我建议您提出一个单独的 Stack Overflow 问题,您可以在其中提供 minimal reproducible example 代码和错误的完整堆栈跟踪。
    【解决方案2】:

    您所要做的就是在查询中使用 LIKE 运算符。 Mime 类型在媒体数据库中作为字符串保存,因此您可以选择它们。您对所有文本文件感兴趣,因此字符串以“text/”开头。修改您的选择

     String selectionMimeType = MediaStore.Files.FileColumns.MIME_TYPE + " LIKE?";
     String mimeType = "txt/";
    

    注意:确保 MIME.TYPE 和操作符之间有空格。

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 2018-03-11
      • 2012-10-11
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      相关资源
      最近更新 更多