Я пытаюсь получить объект FileInputStream
на изображении, которое пользователь выбирает из галереи изображений. Это андроид URI
возвращаемый android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI
Android-как я могу преобразовать объект android.net.Uri в объект java.net.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());
Спасибо. Пробовал это. Он дает исключение (java.net.URI должен иметь действительную схему) – lostInTransit
это неверно и не удастся, если URI имеет символы, которым требуется кодировка (например, пробел). android.net.Uri.toString() декодирует закодированные символы, а java.net.URI будет генерировать исключение, если вы попытаетесь построить его на некодированной строке. правильное решение 'huri = new java.net.URI (URLEncoder.encode (auri.toString()," UTF-8 "));' –
@Jeffrey: Uri.toString() возвращает закодированные символы на моем Android 4.1.2 устройство –