Android - как я могу преобразовать объект android.net.Uri в объект java.net.URI? - PullRequest
54 голосов
/ 18 февраля 2009

Я пытаюсь получить объект FileInputStream на изображении, которое пользователь выбирает из галереи изображений. Это андроид URI вернул android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI

Содержание: // СМИ / внешние / изображения / СМИ / 3

Когда я пытаюсь создать объект Java URI из этого объекта, я получаю IllegalArgumentException с описанием исключения Ожидаемая схема файла в URI: content: // media / external / images / media / 3 URI андроида показывает схему как содержание

Никогда не нашел решения для оригинального вопроса. Но если вам нужен поток байтов изображения в галерее изображений, этот фрагмент кода сделает это.

Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());

Ответы [ 5 ]

50 голосов
/ 18 февраля 2009

Вы можете использовать toString метод андроида Uri в комбинации с String конструктором Java URI.

android.net.Uri auri = new android.net.Uri(what ever);
java.net.URI juri = new java.net.URI(auri.toString());

Android URI | Java URI

39 голосов
/ 24 апреля 2009

Найден правильный способ открыть InputStream из URI контента:

InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);

Вот и все!

2 голосов
/ 19 сентября 2013

Я проголосовал за ответ jgilrincon. Я не могу комментировать из-за низкой репутации, и здесь идет некоторая дополнительная информация - вы можете использовать FileHelper.java из проекта Apache Cordova, у него есть функции, которые вам нужны для обработки файлов из строк Uri, рассматривая mediastore как ну (и папка активов приложения)

В частности, этот метод предоставляет InputStream из Uri:

public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)
2 голосов
/ 30 июня 2011

Существует решение вашего исходного вопроса (конвертировать Uri в URI):

  1. Получить реальный путь к файлу (посмотрите этот код: Получить имя файла и путь из URI из mediastore )

  2. Получить URI, используя реальный путь и конструктор: URI (String uri)

Если вам нужно больше деталей, посмотрите здесь:

Как удалить видео, записанное с помощью намерения с ACTION_VIDEO_CAPTURE?

0 голосов
/ 19 февраля 2009

Поскольку конструкция String не работает, вы пытались создать ее самостоятельно?

android.net.URI auri = new android.net.URI(what ever);
java.net.URI juri = new java.net.URI(auri.getSchema(),
                                     auri.getSchemaSpecificPart(),
                                     auri.getFragment());

Вы также можете дважды проверить, что вы получаете действительные данные из класса Android URI. Документы, перечисленные в моем другом ответе, обсуждают, как практически не происходит проверка ошибок. Если есть ошибка, класс все равно выбрасывает мусор и не выдает никаких исключений. Вероятно, именно поэтому java-класс, который выполняет проверку, выдает исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...