Код: Выделить всё
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)
}
}
Код: Выделить всё
shouldInterceptRequest()
Путь выглядит следующим образом: /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)
За которым следует «Клиент вызвал исключение в mustInterceptRequest. Повторное выбрасывание в пользовательском интерфейсе». поток."
Затем "Следующее исключение было вызвано методом mustInterceptRequest:" (после двоеточия ничего).
Я наконец узнал, что:
Код: Выделить всё
Log.d("x", uriString)
Код: Выделить всё
Log.d("x", uri!!.path!!)
тогда:
Код: Выделить всё
Log.d("x", picUri.path)
Код: Выделить всё
Log.d("x", picUri.toString)
Так вот эта недостающая часть "media/" и была всей проблемой .
При добавлении все работает!
Сегодня я узнал, что Android Uri — это не схема + путь , но схема [+ скрытые элементы] + путь.
Я буду основывать свои процессы на uri.toString() вместо uri.path, и все будет хорошо !
Большое спасибо @CommonsWare
Подробнее здесь: https://stackoverflow.com/questions/787 ... e-made-uri