#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/*");
}
я все еще ищу короткий код, но я надеюсь, что этот код сможет вам помочь…