如何正确设置用户选择的文件夹中图像的 Uri 以显示在 ImageView 中?
How to correctly set the Uri of an image from a folder selected by the user to show in an ImageView?
我需要显示一个我知道文件名但不知道文件夹的图像,必须由用户指定。
我使用 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
从用户那里获取文件夹。它 returns 一个 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
但是,这意味着您将访问默认情况下您没有权限的文件。这意味着您将不得不处理获得许可的问题。
这不是我想要的,所以我放弃了这种方法。
我需要显示一个我知道文件名但不知道文件夹的图像,必须由用户指定。
我使用 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
从用户那里获取文件夹。它 returns 一个 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
但是,这意味着您将访问默认情况下您没有权限的文件。这意味着您将不得不处理获得许可的问题。
这不是我想要的,所以我放弃了这种方法。