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

StackOverflow https://stackoverflow.com/questions/559902

Вопрос

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

content://media/external/images/media/3

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

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

Bitmap bitmap = Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
ByteArrayInputStream fileInputStream = new ByteArrayInputStream(bytes.toByteArray());
Это было полезно?

Решение

Вы могли бы использовать 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());

URI для Android | Java URI

Другие советы

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

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

Вот и все!

Существует решение вашего первоначального вопроса (преобразуйте Uri в URI):

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

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

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

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

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

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

public static InputStream getInputStreamFromUriString(String uriString, Activity cordova)

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top