我有三个活动,第一个获取文本并将其传递给第二个,第二个活动获取另一个文本,如果按下后退按钮将文本返回到第一个活动(因此我可以保存文本,如果从第一个到第二个活动),否则按下一个按钮会将所有文本(从第一个和第二个活动)传递到第三个活动。
现在我的问题出现在第三项活动上:我需要从手机图库中获取图像/使用相机拍照,并执行与第二项相同的操作:如果按下后退按钮,则将其传递给第二项活动或者将其传递给最后一个活动(包含之前传递的所有文本)按下一个按钮。我无法做到这一点。我是否必须返回URI或位图文件?
我使用的代码就是这个。这些是用于画廊和拍照的方法,我在两个不同的按钮上使用它们:
private void openGallery()
{
Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(gallery, PICK_IMAGE);
}
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
这是onActivityResult,我试图保存URI以将其传递给之前的活动(没有结果)。
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK && requestCode == PICK_IMAGE)
{
imageUri = data.getData();
imageView.setImageURI(imageUri);
}
else
{
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
savedImage = bitmap;
imageView.setImageBitmap(bitmap);
}
}
这是后退按钮
backBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (imageUri != null)
{
Intent data = new Intent();
data.setData(imageUri);
setResult(RESULT_OK, data);
}
finish();
}
});
然后是上一个活动
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == requestCode)
{
if (resultCode == RESULT_OK)
{
imageUri = data.getData();
}
}
}
答案 0 :(得分:0)
试试这个(假设你已经有来自画廊或相机的图像)
1)。将位图转换为字节数组: -
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
2)。将字节数组传递给intent: -
Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);
3)。从Bundle获取字节数组并转换为位图图像: -
Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("picture");
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);
image.setImageBitmap(bmp);
或
1)。第一次活动
Uri uri = data.getData();
Intent intent=new Intent(Firstclass.class,secondclass.class);
intent.putExtra("imageUri", uri.toString());
startActivity(intent);
2)。第二课
Imageview iv_photo=(ImageView)findViewById(R.id.iv_photo);
Bundle extras = getIntent().getExtras();
myUri = Uri.parse(extras.getString("imageUri"));
iv_photo.setImageURI(myUri);
答案 1 :(得分:0)
您可以将uri
简单地传递给其他活动
intent.putExtra("imageUri", imageUri.toString());
然后在下一个活动中接收它
Bundle extras = getIntent().getExtras();
Uri myUri = Uri.parse(extras.getString("imageUri"));
希望这有帮助。