#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 в манифест, но приложение должно быть готово ловить этот фильтр. Фильтр может быть своим собственным. Вот дока - тыц И пример из нее:. . . Полезно будет ознакомиться с примером: тыц Если я правильно понял ваш вопрос.
Комментариев нет:
Отправить комментарий