Java 如何在ImageView中显示库中的图像?
我创建了一个按钮,让用户在“用相机拍照”和“从多媒体资料中选择图片”之间进行选择 当拍摄/选择照片时,我会将其显示在下一个活动的ImageView中,我会传递为存储拍摄/选择的照片而创建的文件的URI 当用户使用相机拍照时,它会按预期工作,但当用户从gallery中选择图像时,下一个活动中不会显示图像,尽管两个意图(拍照和选择照片)的编码相同 我的问题:为什么下一个活动中不显示从库中拾取的图像?或者我应该如何继续显示它 打开摄像机的意图(工作正常): 要访问图库并选择图像,请执行以下操作:Java 如何在ImageView中显示库中的图像?,java,android,imageview,Java,Android,Imageview,我创建了一个按钮,让用户在“用相机拍照”和“从多媒体资料中选择图片”之间进行选择 当拍摄/选择照片时,我会将其显示在下一个活动的ImageView中,我会传递为存储拍摄/选择的照片而创建的文件的URI 当用户使用相机拍照时,它会按预期工作,但当用户从gallery中选择图像时,下一个活动中不会显示图像,尽管两个意图(拍照和选择照片)的编码相同 我的问题:为什么下一个活动中不显示从库中拾取的图像?或者我应该如何继续显示它 打开摄像机的意图(工作正常): 要访问图库并选择图像,请执行以下操作: pr
private void openGalleryIntent() {
Log.d(TAG, "Method for Intent Gallery started");
Intent galleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
if (galleryIntent.resolveActivity(getPackageManager()) != null) {
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
}
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.emergence.pantherapp.fileprovider", photoFile);
galleryIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(galleryIntent, PICK_IMAGE);
}
}
}
然后是onActivityResult:(currentPhotoPath是为存储图像而创建的文件的绝对路径)
以下是图像在以下活动中的显示方式:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_modify_picture);
Intent intent = getIntent();
String imageUri = intent.getStringExtra("USER_IMAGE");
if (imageUri != null) {
Log.d(TAG, imageUri);
} else {
Log.d(TAG, "imageUri was null");
}
image = findViewById(R.id.picture);
image.setImageURI(Uri.parse(imageUri));
}
我确保在清单中有READ_EXTERNAL_存储,xml布局只是设置为高度和宽度的“匹配父对象”,但如果相关,我可以添加它们。很少
意图
操作使用额外输出
。大多数情况下,这是一个动作\图像\捕获
的事情
更典型的是,获取一段内容的意图(ACTION\u PICK
,ACTION\u GET\u content
,ACTION\u OPEN\u DOCUMENT
,ACTION\u CREATE\u DOCUMENT
,ACTION\u OPEN\u DOCUMENT\u TREE
,等等)从交付给
onActivityResult()的
Intent中的内容供应商返回一个Uri。给定您的实现,这将是
data.getData(),以获取该
Uri`
然后,您可以使用ContentResolver
和openInputStream()
对Uri
标识的内容获取InputStream
。例如,在您的情况下,您可以使用该InputStream
将字节复制到FileOutputStream
中,以制作您自己的本地内容副本
请注意。操作拾取
不使用额外输出
。请参阅并阅读。@commonware谢谢。您知道如何从我之前创建的文件中的ACTION\u PICK返回的URI复制所选图像吗?使用ContentResolver
和openInputStream()
在URI
标识的内容上获取InputStream
。使用FileOutputStream
在文件所标识的内容上获取OutputStream
。然后,将InputStream
中的字节复制到OutputStream
。我不知道如何将其标记为有效答案。非常好,谢谢你。
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && requestCode == 1) {
Log.d(TAG, currentPhotoPath);
Intent intent = new Intent(this, ModifyPictureActivity.class);
intent.putExtra("USER_IMAGE", currentPhotoPath);
startActivity(intent);
} else if (resultCode == Activity.RESULT_OK && requestCode == 2) {
Log.d(TAG, currentPhotoPath);
Intent intent = new Intent(this, ModifyPictureActivity.class);
intent.putExtra("USER_IMAGE", currentPhotoPath);
startActivity(intent);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_modify_picture);
Intent intent = getIntent();
String imageUri = intent.getStringExtra("USER_IMAGE");
if (imageUri != null) {
Log.d(TAG, imageUri);
} else {
Log.d(TAG, "imageUri was null");
}
image = findViewById(R.id.picture);
image.setImageURI(Uri.parse(imageUri));
}