Java 如何启动传递图像uri的新活动
我有一个带有按钮的活动,可以打开一个对话框,在拍照或从画廊中选择图片之间进行选择,编码如下:Java 如何启动传递图像uri的新活动,java,android,android-activity,Java,Android,Android Activity,我有一个带有按钮的活动,可以打开一个对话框,在拍照或从画廊中选择图片之间进行选择,编码如下: private void showDialogToSelectAFile() { MaterialAlertDialogBuilder dialog = new MaterialAlertDialogBuilder(this); dialog.setTitle("Select a file or take a picture") .setMe
private void showDialogToSelectAFile() {
MaterialAlertDialogBuilder dialog = new MaterialAlertDialogBuilder(this);
dialog.setTitle("Select a file or take a picture")
.setMessage("Choose one of the options")
.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//do nothing
}
}).setPositiveButton("Take a picture", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
openCameraToTakePictureIntent();
}
}).setNegativeButton("Select a file from your gallery", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
openGalleryIntent();
}
}).show();
}
然后运行以下意图来执行所选操作:
private void openCameraToTakePictureIntent() {
Log.d(TAG, "Method for Intent Camera started");
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
}
// Continue only if the File was successfully created
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.emergence.domain.fileprovider",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
}
现在,我想开始一个新的活动,它将显示图片并允许对此图片进行修改,因此我想在“onActivityResult”中传递URI,但我不知道如何做
到目前为止,它没有崩溃,我可以选择一个图像或拍摄一张照片,但当然,当我这样做时,它只会返回到活动,除了希望将图像存储在文件中之外,什么也不做
我的问题:
是否有更好的方法继续向新活动传递图像,同时保持图像的完整质量?
如果没有,我如何传递此URI并在新活动中检索图像?
我的图像是否实际存储在我创建的文件中
以下是我的createImageFile函数,以防相关:
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
currentPhotoPath = image.getAbsolutePath();
return image;
}
谢谢你的帮助
编辑:
我已将onActivityResult更新如下:
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && requestCode == 1) {
Intent intent = new Intent(this, ModifyPictureActivity.class);
intent.putExtra(MediaStore.EXTRA_OUTPUT, currentPhotoPath);
startActivity(intent);
}
我创建了这个新的活动,它只有一个ImageView,我想在其中显示图片,但我找不到正确的方法将图片设置为Extras。到目前为止,我有:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_modify_picture);
Intent intent = getIntent();
intent.getExtras();
image = findViewById(R.id.image);
image.setImageURI(???);
}
我是否应该尝试使用“setImageURI”以外的其他方法设置图像?实际上,您有两个选项:
onActivityResult
回调中获得它EXTRA\u OUTPUT
键,MediaStore
将文件保存到该位置。因此,在onActivityResult
回调中,您只需检查消息是否ok
,请求代码是否对应,然后您就可以使用EXTRA\u OUTPUT
键从文件中读取传入的URI在OnActivityResult检查中,如果URI不为null,则将其传递给新活动
Intent intent = Intent(this, your activity)
intent.putExtra("uri", uri)
startActivity(intent)
然后在(您的新活动)中,使用这些行获取Uri
Bitmap photo= BitmapFactory.decodeFile(intent.getStringExtra("uri"))
imageView.setImageBitmap(photo)
注意:将uri作为字符串传递我确实覆盖了onActivityResult,但即使在阅读了android Developer之后,我也真的不知道应该在里面放什么。我猜“数据”是我的图片,但我如何用这些数据开始其他活动是我的问题。好的,多亏了你,我就要接近了,我只需要最后一个帮助。我用onActivityResult函数编辑了我的帖子。你应该使用
getIntent().getParcelableExtra(一些自定义密钥)
,我还建议你使用自定义密钥,而不是MediaStore.EXTRA\u输出
。非常感谢你,我终于在你的建议下实现了。