Намерение Android на основе типа файла

#android #android-intent #mime-types

#Android #android-намерение #mime-типы

Вопрос:

Я пытаюсь разработать браузер папок для Android.. В папке могут находиться файлы любого типа, то есть doc-файл, txt-файл, mp3, avi, apk-файл и так далее.. Как мне запустить конкретное приложение на основе файла, на который нажал пользователь … я имею в виду, как мне создать намерение на основе типа файла… Спасибо, Прашант

Ответ №1:

Просто установите тип намерения, например: intent.setType("video/mpeg"); .

Редактировать: Используйте MimeTypeMap для динамического получения MIME-типа для файла.

Комментарии:

1. это можно сделать для известных типов файлов … предположим, что есть новые типы файлов, скажем .rtf, и пользователь установил какое-либо приложение для отображения файлов .rtf.. тогда мне придется перекодировать свое приложение для запуска таких файлов…

2. Нет, потому что вы можете получить MIME-тип из файла 😉 Смотрите мою правку!

3. Привет. Не могли бы вы, пожалуйста, сказать мне, возможно ли показать предварительный просмотр файла на основе типа mime. Я имею в виду, что если это видео, я хочу показать предварительный просмотр, а если это pdf, я просто хочу показать значок и позволить пользователю открыть его, нажав на него. Возможно ли это?

4. Это возможно, но я совершенно уверен, что вы должны реализовать это самостоятельно.

Ответ №2:

Создайте одно действие. Где вы найдете расширение файла, будь то mp3 или dic и т.д. На основе расширения вызовите другое действие из этого действия.

Спасибо Дипак

Комментарии:

1. я не хочу жестко кодировать запуск активности на основе расширений в моем приложении .. не может ли это быть сделано самой системой .. я хочу использовать универсальный, так что в какой-то момент в будущем, если пользователь установит приложение для некоторого расширения «.abc», затем с помощью моего приложения и щелчка по файлу «.abc» должно быть запущено это приложение..

Ответ №3:

Я нашел один. Возможно, это могло бы помочь вам:

 Intent intent= new Intent();
intent.setAction(Intent.ACTION_VIEW);

File file = new File(filePath);

MimeTypeMap mime = MimeTypeMap.getSingleton();
String ext = file.getName().substring(file.getName().indexOf(".") 1);
String type = mime.getMimeTypeFromExtension(ext);

intent.setDataAndType(Uri.fromFile(file), type);
  

Ответ №4:

может быть так … потому что я пробую это в своем коде…

 //differentiate file type
    String filename = o.getName();
    String filenameArray[] = filename.split("\.");
    String extension = filenameArray[filenameArray.length-1];

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);

    if (extension.contains("png") || extension.contains("gif") || extension.contains("jpg") 
            || extension.contains("jpeg") || extension.contains("bmp"))
    {
        intent.setDataAndType(Uri.parse("file://"   o.getPath()), "image/*");
    }
    if (extension.contains("txt") || extension.contains("csv") || extension.contains("xml"))
    {
        intent.setDataAndType(Uri.parse("file://"   o.getPath()), "text/*");
    }
    if (extension.contains("pdf"))
    {
        intent.setDataAndType(Uri.parse("file://"   o.getPath()), "application/pdf");
    }
    if (extension.contains("doc") || extension.contains("docx"))
    {
        intent.setDataAndType(Uri.parse("file://"   o.getPath()), "application/msword");
    }
    if (extension.contains("mp3") || extension.contains("wav") || extension.contains("oog") 
            || extension.contains("mid") || extension.contains("amr") || extension.contains("midi"))
    {
        intent.setDataAndType(Uri.parse("file://"   o.getPath()), "audio/*");
    }
    if (extension.contains("mpeg") || extension.contains("3gp"))
    {
        intent.setDataAndType(Uri.parse("file://"   o.getPath()), "video/*");
    }
  

я все еще ищу короткий код, но я надеюсь, что этот код сможет вам помочь…