2010-12-07 4 views
4

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

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

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

Когда я вручную указать MIMETYPE, открывается правильное применение - в этом случае PictureViewer ,

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

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

ответ

1

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

+1

Но почему Android не может выбрать правильный тип самостоятельно? Ссылка ссылки на намерение для типа «Задает явный тип (тип MIME) данных намерения. Обычно тип выводится из самих данных. При настройке этого атрибута вы отключите эту оценку и принудительно введите явный тип». Это не работает с моим кодом, так что это должно быть ошибкой в ​​нем? – Gubbel 2010-12-08 15:24:01

1

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

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

Надеется, что это помогает.

+0

Работает отлично. Благодарю. Интересно, почему модераторы SO не имеют права отмечать ответ в качестве ответа? У сайта MSDN Q/A есть эта приятная функция. – Sufian 2014-02-12 07:05:29

Смежные вопросы