Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

Открытие файла

#android #java


Как в Android открыть файл (например, изображение) средствами системы. То есть чтобы
файл открылся в приложении, которое предусмотрена для этого типа.
Обновлено.
Для того, чтобы система могла понять, какими приложениями она может открыть файл,
надо явно указать mime-type. В библиотеке есть специальный класс для работы с mime-types:
android.webkit.MimeTypeMap.
Для того чтобы получить mime-type мы сначала узнаем расширение файла.
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
String mType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);

Но такой код работать не будет, т.к.

Метод getFileExtensionFromUrl возвращает расширение верно, только если имя файла
содержит только латинские символы (без пробелов, без кириллицы, и т.д.).
Метод getMimeTypeFromExtension работает верно, только если расширение в нижним регистре
(так что добавляем toLowerCase).

Далее. Если настроить intent так
intent.setData(Uri.fromFile(file)); 
intent.setType(mType);

то будет установлен только type, а data будет равна null. Если строчки поменять местами,
то, наоборот, type == null. Т.е. либо одно, либо другое. Заработало всё только так:
intent.setDataAndType(Uri.fromFile(file), mType);

(тестировал на девайсе от "Моторола")    


Ответы

Ответ 1



Открыть файл весьма просто: Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("file:///mnt/sdcard/file.xls")); startActivity(intent); В Uri.parse передаётся абсолютный путь к нужному файлу. Вместо Uri.parse можно указать готовый Uri, если он у вас есть в приложении. Если указанный файл может открыть только одно приложение, файл будет открыт сразу, если несколько - будет показан диалог выбора нужного приложения. Если же такой тип файла ни одно приложение в системе открыть не может, будет показано стандартное системное сообщение об этом.

Ответ 2



Нужно добавить определенный intent-filter в манифест, но приложение должно быть готово ловить этот фильтр. Фильтр может быть своим собственным. Вот дока - тыц И пример из нее: . . . Полезно будет ознакомиться с примером: тыц Если я правильно понял ваш вопрос.

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

Отправить комментарий