Мне нужно отобразить изображение, имя файла которого я знаю, но не знаю папку, которую должен указать пользователь.
Я использую Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);, чтобы получить папку от пользователя. Он возвращает Uri с путем в следующих строках:
content://com.android.externalstorage.documents/tree/primary%3ADownload
Теперь мне нужно отобразить изображение из этой папки в ImageView. Я пробовал следующее:
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),
Uri.parse(chosenFolder + "/image.png"));
ImageView imageView = findViewById(R.id.imageview);
imageView.setImageBitmap(bitmap);
Первая строка выдает следующее исключение:
java.lang.IllegalArgumentException: Invalid URI: content://com.android.externalstorage.documents/tree/primary%3ADownload/image.png
Замена %3A на : не работает.
Как правильно настроить Uri для отображения изображения?
Нет, пользователь выбирает только папку. У меня есть имена изображений в базе данных.




я думаю, вы должны использовать file path, а не URI. content://Uri не обязательно должен представлять файл в файловой системе.
попробуй это :
String filePath = null;
if (chosenFolder != null && "content".equals(chosenFolder.getScheme())) {
Cursor cursor = this.getContentResolver().query(chosenFolder, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
cursor.moveToFirst();
filePath = cursor.getString(0);
cursor.close();
} else {
filePath = chosenFolder.getPath();
}
а затем создайте растровое изображение с путем к файлу:
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),
Uri.parse(filepath+ "/image.png"));
Мне удалось добиться того, чего я хотел, с помощью InputStream.
InputStream is = getContentResolver().openInputStream(imageUri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
Чтобы работать, imageUri должен быть Uri в соответствии со строками:
content://com.android.externalstorage.documents/document/primary:Download/image.png
Однако это означает, что вы будете получать доступ к файлам, на которые у вас нет разрешения по умолчанию. Это означает, что вам придется иметь дело с получением разрешения.
Это не то, что я хотел, поэтому я отказался от этого подхода.
изображение, которое вы хотите показать, выбрано из галереи, верно?