@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final CharSequence[] items = { "相册", "拍照" };
AlertDialog dlg = new AlertDialog.Builder(CardFrontActivity.this).setTitle("选择照片").setItems(items,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
//这里item是根据选择的方式, 在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法
if(which==1){
//拍照要先存入储存卡或者内存,否则读取图片会模糊
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyyMMddhhmmss");
String nowdata = sdf.format(new Date());
String pictureName = "_IMG_" + nowdata + ".jpg";
photoPath = Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/DCIM/Camera/" + pictureName;
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File(photoPath)));
startActivityForResult(intent, 1);
}else{
Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
getImage.addCategory(Intent.CATEGORY_OPENABLE);
getImage.setType("image/jpeg");
startActivityForResult(getImage, 0);
}
}
}).create();
dlg.show();
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
ContentResolver contentResolver = getContentResolver();
/**
* 因为两种方式都用到了startActivityForResult方法,这个方法执行完后都会执行onActivityResult方法,
* 所以为了区别到底选择了那个方式获取图片要进行判断,这里的requestCode跟startActivityForResult里面第二个参数对应
*/
if(requestCode==0){
try {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
photoView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}else if(requestCode==1){
try {
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize=1;
if(myBitmap!=null)
myBitmap.recycle();
myBitmap = BitmapFactory
.decodeFile(photoPath,opts);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
}
photoView.setImageBitmap(myBitmap);
}
}