正确的mimeType用于打开文件

时间:2010-12-07 23:25:08

标签: android file android-intent mime-types

我正在尝试使用File打开Intent,但Android无法为文件类型打开正确的应用程序。

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

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

当我手动指定mimeType时,会打开正确的应用程序 - 在本例中为pictureviewer。

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

有没有办法让Android打开正确的应用程序,而不是手动设置从文件扩展名判断的类型?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

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());
    }
}

希望这有帮助。

答案 1 :(得分:1)

这取决于其他应用程序。如果他们设置了他们的意图过滤器,包括mime信息,文件扩展名信息或两者。因此,我的建议是您不能依赖其他应用程序,因此最佳选择是在启动intent时提供尽可能多的信息,包括MIME类型。