Правильный mimeType для открытия файла - PullRequest
4 голосов
/ 08 декабря 2010

Я пытаюсь открыть File с Intent, но Android не открывает нужное приложение для типа файла.

Используя следующий код, каждый файл - pdf, изображения, все - открывается с помощью музыкального приложения:

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

Когда я вручную указываю mimeType, открывается нужное приложение - в данном случае просмотрщик картинок.

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

Есть ли способ заставить Android открывать правильное приложение, вместо ручной установки типа, исходя из расширения файла?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2013

Вы можете сделать что-то вроде этого:

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 голос
/ 08 декабря 2010

Это зависит от других приложений.Если они установили свои фильтры намерений, включая информацию MIME, информацию о расширении файла или оба.Поэтому я рекомендую вам не полагаться на другие приложения, поэтому лучший вариант - предоставить как можно больше информации при запуске намерения, включая тип MIME.

...