Андроид как получить изображение из медиастока, сделанное Ури? [дубликат]Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Андроид как получить изображение из медиастока, сделанное Ури? [дубликат]

Сообщение Anonymous »

Я создал и сохранил такое изображение:

Код: Выделить всё

    val values = ContentValues(2)
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM)
picUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)

Intent(MediaStore.ACTION_IMAGE_CAPTURE).also { takePictureIntent ->
takePictureIntent.resolveActivity(packageManager)?.also {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, picUri )
startActivityForResult(takePictureIntent, CAMERA_CAPTURE)
}
}
Тогда мне придется повторно использовать эту картинку позже. Мне нужно передать его содержимое в WebResourceResponse в пользовательском WebViewClient::

Код: Выделить всё

shouldInterceptRequest()
Мне нужен входной поток для возврата WebResourceResponse("image/jpeg", "utf-8", inputStream)
Путь выглядит следующим образом: /external/images/media/40
Как получить входной поток из содержимого://external/images/media/40 uri?
Или как мне запросить MediaStore, чтобы он нашел мою фотографию?
Что я пробовал (при многих других неудачных попытках):

Код: Выделить всё

        val uriString = "content:/" + path //results in content://external/images/media/40
val uri = Uri.parse(uriString)
val inputStream = getContentResolver().openInputStream(uri);
if(inputStream==null) return WebResourceResponse("image/jpeg", "utf-8", ByteArrayInputStream(byteArrayOf()))//return empty image (404 would trigger onReceivedHttpError)
return WebResourceResponse("image/jpeg", "utf-8", inputStream)
Я получаю следующую ошибку в Logcat: «Не удалось найти информацию о внешнем поставщике».

За которым следует «Клиент вызвал исключение в mustInterceptRequest. Повторное выбрасывание в пользовательском интерфейсе». поток."

Затем "Следующее исключение было вызвано методом mustInterceptRequest:" (после двоеточия ничего).
Я наконец узнал, что:

Код: Выделить всё

Log.d("x", uriString)
==> content://external/images/media/47 но

Код: Выделить всё

Log.d("x", uri!!.path!!)
==> /images/media/47

тогда:

Код: Выделить всё

Log.d("x", picUri.path)
==> /external/images/media/47 но

Код: Выделить всё

Log.d("x", picUri.toString)
==> content://media/external/images/media/47
Так вот эта недостающая часть "media/" и была всей проблемой .

При добавлении все работает!
Сегодня я узнал, что Android Uri — это не схема + путь , но схема [+ скрытые элементы] + путь.

Я буду основывать свои процессы на uri.toString() вместо uri.path, и все будет хорошо !

Большое спасибо @CommonsWare

Подробнее здесь: https://stackoverflow.com/questions/787 ... e-made-uri
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»