Android- как я могу преобразовать объект android.net.Uri в объект java.net.URI?

голоса
45

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

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

Когда я пытаюсь построить Java URI объекта из этого объекта, я получаю IllegalArgumentException с описанием исключения ожидаемой схемы файла в URI: содержание: // СМИ / внешние / изображения / СМИ / 3 , тогда как Android URI показывает схему как содержание

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

Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
Задан 18/02/2009 в 06:05
источник пользователем
На других языках...                            


5 ответов

голоса
41

Вы можете использовать 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

Ответил 18/02/2009 в 07:03
источник пользователем

голоса
39

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

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

Это все!

Ответил 24/04/2009 в 07:03
источник пользователем

голоса
2

Существует решение для вашего первоначального вопроса (конвертировать Ури в URI):

  1. Получить путь реального файла (смотрите следующий код: Получить имя файла и путь от URI из MediaStore )

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

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

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

Ответил 30/06/2011 в 12:45
источник пользователем

голоса
1

Я голосовал за ответ jgilrincon в. Я не могу комментировать из - за низкой репутации, и здесь идет некоторая дополнительная информация - Вы можете использовать FileHelper.java из проекта Apache Кордова, он имеет функции, необходимые для обработки строк из файла Ури, учитывая Mediastore , а также (и папку приложения активов )

В частности, этот метод обеспечивает InputStream от Uri:

public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)
Ответил 19/09/2013 в 19:43
источник пользователем

голоса
0

Поскольку строка конструкционный не работает вы пробовали только его построения вашей собственной личности?

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. Документы, перечисленные в моем другом ответе обсудить, как она делает в значительной степени нет проверки ошибок. Если есть Infact ошибка класс просто выплевывает мусор в любом случае и не выбрасывает никаких исключений. Какой может быть весьма вероятно, почему класс Java, который действительно делает проверку бросает исключение.

Ответил 19/02/2009 в 15:15
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more