Intereting Posts
Обнаруживать, удалено ли мое приложение Как отключить множественное обнаружение штрих-кода Android – что это за виджет? (Контекстное меню) О проекте android launchmode "singleTask" Основная HTTP-аутентификация с использованием KSOAP для Android Как начатьForeground () без уведомления? Предотвращение сканирования медиа-сканера с помощью JPG, загруженного с помощью DownloadManager на Android? (Разработчик) Как определить, когда пользователь запускает другое приложение? (Android) Получите все имена и номера контактов в виде строкового списка на Android Как сделать ActionBar как Google Play, который исчезает при прокрутке ProgressBar не оживляет при раздувании viewstub Android AudioTrack () Как остановить игровой поток после его запуска Запуск программного обеспечения QT на Android Установка подписанного APK не устанавливает приложение на Android Wear Приложение Google Messenger не прикрепляет изображение при отправке MMS

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

Спасибо за любую помощь.

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

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

Когда я пытаюсь создать объект URI Java из этого объекта, я получаю исключение IllegalArgumentException с описанием исключения. Ожидаемая схема файла в URI: content: // media / external / images / media / 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 для android 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

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

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

Это все!

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

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

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

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

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

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

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

 public static InputStream getInputStreamFromUriString(String uriString, Activity cordova) 

Поскольку построение 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()); 

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