Android- как я могу преобразовать android.net.Объект Uri в java.net.Объект URI?
-
05-09-2019 - |
Вопрос
Я пытаюсь получить 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());
Другие советы
Найден правильный способ открыть InputStream из URI содержимого:
InputStream fileInputStream=yourContext.getContentResolver().openInputStream(uri);
Вот и все!
Существует решение вашего первоначального вопроса (преобразуйте Uri в URI):
Получите реальный путь к файлу (посмотрите этот код: Получите имя файла и путь из URI из mediastore)
Получите 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, который выполняет проверку, выдает исключение.