1、常量定义
public static String SDPATH = Environment.getExternalStorageDirectory()
+ "/Pictures/";
private final int TAKE_PICTURE = 0x01;
private final int ALBUM = 0x02;
private final int PHOTO_REQUEST_CUT = 0x03;
private File tempFile;
2、接收数据
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode ) {
case TAKE_PICTURE://拍照
startPhotoZoom(Uri.fromFile(tempFile));
break;
case ALBUM://图库
if (null == data) {
break;
}
Uri selectImage = data.getData();
startPhotoZoom(selectImage);
break;
case PHOTO_REQUEST_CUT:
if (null == data) {
break;
}
setResult(RESULT_OK, data);
//传给下一步,可通过Bitmap bm = (Bitmap) data.getExtras().get("data");获得裁剪后的bitmap对象
this.finish();
break;
default:
break;
}
}else {
this.finish();//取消
}
}
2、调用系统相机
//打开系统相机
private void OpenCamera(){
tempFile = new File(SDPATH +getPhotoFileName());
Intent openCameraIntent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(tempFile));//将拍照保存本地
startActivityForResult(openCameraIntent, TAKE_PICTURE);
}
3、调用系统图库
//打开系统图库方法
private void openAlbum(){
Intent openAlbumIntent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(openAlbumIntent, ALBUM);
}
4、调用系统裁剪图片的方法
//开始裁剪
private void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// crop为true是设置在开启的intent中设置显示的view可以剪裁
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX,outputY 是剪裁图片的宽高
intent.putExtra("outputX", 300);
intent.putExtra("outputY", 300);
intent.putExtra("return-data", true);
intent.putExtra("noFaceDetection", true);
startActivityForResult(intent, PHOTO_REQUEST_CUT);
}
5、生成拍照文件名的方法
// 使用系统当前日期加以调整作为照片的名称
private String getPhotoFileName() {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat(
"'IMG'_yyyyMMddHHmmss");
return dateFormat.format(date) + ".jpg";
}
5、创建一个文件的方法
private void createNewFile(File file){
if (!file.exists()) {
file.getParentFile().mkdirs();
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}