本文借鉴了多位前辈的代码,在自己的项目使用中根据需求做了一些修改,为了以后再次使用类似功能的时候方便一些,特把主要的代码流程部分贴出来
首先在activity中定义几个常量
private static final String IMAGE_UNSPECIFIED = "image/*";
private static final int TAKE_PICTURE = 0;//拍照
private static final int CHOOSE_PICTURE = 1;//手机内单选
private static final int MULTIPLE_CHOICE = 2;//手机内多选
private static final int SCALE = 5;// 照片缩小比例
//临时图片的位置,主要是为了得到tempUri
File tempFile = new File(Environment.getExternalStorageDirectory(), "temp.jpg");
Uri tempUri = Uri.fromFile(tempFile);
然后在你需要添加图片的操作里面加入如下选项
switch (position) {
case TAKE_PICTURE://拍照
Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri imageUri = Uri
.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg"));
// 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换
openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(openCameraIntent, TAKE_PICTURE);
break;
case CHOOSE_PICTURE://单选
Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT);
openAlbumIntent.setType("image/*");
startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);
break;
case MULTIPLE_CHOICE:// 多选
Intent intent = new Intent(AddGoodsActivity.this, PhotoWallActivity.class);
intent.putExtra("size", 8 - dgv_add_goods_imgs2.getChildCount());
startActivityForResult(intent, MULTIPLE_CHOICE);
break;
default:
break;
}
拍照会调用相机拍照后在内存卡根目录存一张临时图片,单选会选择一张图片后返回图片路径,这两个都是取的文件路径,而不是bitmap,因为要保证清晰度,最好是自己去重绘bitmap,特别是你需要切图的,切完之后不能直接返回bitmap,而是将切完之后的图保存成临时文件,然后重绘
拍完选完之后会自动调用当前activity的onActivityResult,在onActivityResult处理返回的图片
@Overr