在Android中使用相机捕获图像

时间:2011-07-22 11:49:34

标签: java android memory-management

你好stackoverflow的朋友, 我需要使用相机拍照,并在拍照后进入下一个活动而不显示第一个活动。并在imageview中显示它。 以下是我的申请流程

第一项活动 - >有相机意图的按钮 - >转到下一个活动(没有显示第一个活动)第二个活动 - >我需要在imageview中显示图像。

我看到很多相机意图的例子没有人解释如何在不显示第一个活动的情况下进入下一个活动并在第二个的imageview中显示它。

在imageview中反复显示图像时是否出现任何遗忘问题?

提前致谢

3 个答案:

答案 0 :(得分:1)

在第一项活动中:

 Button b=(Button)findViewByid(R.id.button);
 b.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
    doTakePhotoAction();

    }
}); 
    private void doTakePhotoAction() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
mUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),
    "pic_" + String.valueOf(System.currentTimeMillis()) + ".jpg"));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mUri);

try {
    intent.putExtra("return-data", true);
    startActivityForResult(intent, CAMERA_RESULT);
       // finish();
} catch (ActivityNotFoundException e) {
    e.printStackTrace();
}
}

 protected void onActivityResult(int requestCode, 
    int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
    return;
}
if (requestCode == CAMERA_RESULT) {
    Intent intent = new Intent(this, nextimage.class);
    // here you have to pass absolute path to your file
    intent.putExtra("image-path", mUri.getPath());
    intent.putExtra("scale", true);
    startActivity(intent);
        finish();
}
}

在nextimage.class中,您可以设置一个图像视图并从putExtra获取图像路径并将其放在imageview中。

  String mImagePath = extras.getString("image-path");
  Bitmap mBitmap = getBitmap(mImagePath);
   private Uri getImageUri(String path) {
return Uri.fromFile(new File(path));
}

private Bitmap getBitmap(String path) {
Uri uri = getImageUri(path);
InputStream in = null;
try {
    in = mContentResolver.openInputStream(uri);
    return BitmapFactory.decodeStream(in);
} catch (FileNotFoundException e) {
    Log.e(TAG, "file " + path + " not found");
}
return null;
}

将位图放在imageview中。你必须在secondActivity中创建imageview。

答案 1 :(得分:0)

使用相机意图....这是一个简单的代码

import android.app.Activity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.os.Bundle;

import android.widget.ImageView;

public class CameraIntent extends Activity {

final static int CAMERA_RESULT = 0;

ImageView imv;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

    startActivityForResult(i, CAMERA_RESULT);

}

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

super.onActivityResult(requestCode, resultCode, intent);

if (resultCode == RESULT_OK)

{

Get Bundle extras = intent.getExtras();

Bitmap bmp = (Bitmap) extras.get("data");

imv = (ImageView) findViewById(R.id.ReturnedImageView);

imv.setImageBitmap(bmp);

}

}

}

答案 2 :(得分:0)

使用以下代码,它将解决您的问题。

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

onActivityResult()方法: -

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == CAMERA_PIC_REQUEST) {
            bmpImage = (Bitmap) data.getExtras().get("data");
            drawable = new BitmapDrawable(bmpImage);
            mImageview.setImageDrawable(drawable);
        }
    }
}