Android Studio将图像作为意图结果传递给图库

时间:2018-02-08 10:02:54

标签: android image android-intent gallery onactivityresult

我有三个活动,第一个获取文本并将其传递给第二个,第二个活动获取另一个文本,如果按下后退按钮将文本返回到第一个活动(因此我可以保存文本,如果从第一个到第二个活动),否则按下一个按钮会将所有文本(从第一个和第二个活动)传递到第三个活动。

现在我的问题出现在第三项活动上:我需要从手机图库中获取图像/使用相机拍照,并执行与第二项相同的操作:如果按下后退按钮,则将其传递给第二项活动或者将其传递给最后一个活动(包含之前传递的所有文本)按下一个按钮。我无法做到这一点。我是否必须返回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();

        }
    }
}

2 个答案:

答案 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"));

希望这有帮助。