android - 打开文件的正确 mimeType

标签 android file android-intent mime-types

我正在尝试使用 Intent 打开一个 File,但 Android 没有打开适合该文件类型的应用程序。

使用以下代码,每个文件 - pdf、图像,所有内容 - 都使用音乐应用程序打开:

Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.fromFile(file));
startActivity(i);

当我手动指定 mimeType 时,会打开正确的应用程序 - 在本例中是图片查看器。

i.setDataAndType(Uri.fromFile(file), "image/*");

有什么方法可以让 Android 打开正确的应用程序,而不是手动设置根据文件扩展名判断的类型?

最佳答案

你可以这样做:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.fromFile(file));
intent.setType(FileHelper.getMimeType(file));
startActivity(intent);

这是我的助手类的(相关部分)从文件中获取 mimeType

关键是要用MimeTypeMap

public class FileHelper
{

    public static String getMimeType(File file)
    {
        return getMimeType(file.getName());
    }

    public static String getMimeType(String fileName)
    {
        String extension = getExtension(fileName);
        if (extension == null)
            return null;
        return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
    }

    public static String getExtension(File file)
    {
        return getExtension(file.getName());
    }

    public static String getExtension(String fileName)
    {
        int extensionDelimiter = fileName.lastIndexOf(".");
        if (extensionDelimiter == -1)
            return null;
        return fileName.substring(extensionDelimiter + 1, fileName.length());
    }
}

希望这对您有所帮助。

关于android - 打开文件的正确 mimeType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382730/

相关文章:

android - 如何更改操作栏菜单项的顺序

android - 为什么 mkdirs() 方法不起作用?

Java 读取过去保存的变量

python - 如果我需要行数并且需要附加到文件,我可以避免处理文件两次吗?

android - 从联系人列表中选择联系人并为该联系人选择特定的电子邮件

android - Intent 在 android 中是异步的。为什么不能是同步调用呢?

Android Facebook 共享对话框的内容未显示在主页中

java - Android 中使用 Dom 从 XML 树中获取 HTML 内容

Android BatteryManager 没有报告正确的充电状态

android - 如何保持第二次 Activity 的 Intent ?