第一行代码中相机的源码存在错误,选择相册的时候会崩,解决方法及步骤:
1、将chooseFromAlbum点击事件中的
Intent intent = new Intent("android.intent.action.GET_CONTENT")
改为
Intent intent = new Intent("android.intent.action.PICK")
2、将chooseFromAlbum点击事件中的
startActivityForResult(intent,CROP_PHOTO)
改为
startActivityForResult(intent,TAKE_PHOTO)
因为case TAKE_PHOTO中的intent是用来启动裁剪程序的。
3.将case TAKE_PHOTO中的代码修改为如下:
case TAKE_PHOTO:
if (resultCode == RESULT_OK) {
if (data != null) {
imageUri = data.getData();
}
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO);
}
break;
完整代码如下:
public static final int TAKE_PHOTO = 1;
public static final int CROP_PHOTO = 2;
private Uri imageUri;
private ImageView picture;
/**
* 拍照按钮点击事件
*/
btn_take_photo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Date date=new Date();
Long photo_name=date.getTime();
File outputImage = new File(Environment.getExternalStorageDirectory(),
photo_name+".jpg");
photos.add(outputImage);
try {
if (outputImage.exists()) {
outputImage.delete();
}
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
imageUri = Uri.fromFile(outputImage);
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_PHOTO);
}
});
/**
* 选择相册按钮点击事件
*/
btn_select_pictures.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Date date=new Date();
Long photo_name=date.getTime();
File outputImage = new File(Environment.getExternalStorageDirectory(),
photo_name+".jpg");
photos.add(outputImage);
try {
if (outputImage.exists()) {
outputImage.delete();
}
outputImage.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
imageUri = Uri.fromFile(outputImage);
Intent intent = new Intent("android.intent.action.PICK");
intent.setType("image/*");
intent.putExtra("crop", true);
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent,TAKE_PHOTO);
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case TAKE_PHOTO:
if (resultCode == RESULT_OK) {
if (data != null) {
imageUri = data.getData();
}
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, CROP_PHOTO);
}
break;
case CROP_PHOTO:
if (resultCode == RESULT_OK) {
try {
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
picture.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
break;
default:
break;
}
}