在开发过程中,我们一般会碰到图片选择功能。
它包括两部分:一个是通过直接调用系统的相册获取,一个是通过系统相机拍照获取。
public class SelectImageUtil { private static final String TAG = SelectImageUtil.class.getSimpleName(); private Context mContext; private Intent mData; public SelectImageUtil(Context context,Intent data){ mContext = context; mData = data; } /** * 处理系统相册图片 */ public String doPhotoPic(){ Bitmap bm = null; ContentResolver resolver = mContext.getContentResolver(); String path = ""; try { Uri originalUri = mData.getData(); bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); String[] proj = {MediaStore.Images.Media.DATA}; Cursor cursor = ((Activity)mContext).managedQuery(originalUri, proj, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); path = cursor.getString(column_index); LogUtil.info(TAG, "path= " + path); }catch (IOException e) { LogUtil.error(TAG,e.toString()); } return path; } /** * 处理系统相机图片 */ public String doCameraPic(){ String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { return ""; } Bundle bundle = mData.getExtras(); Bitmap bitmap = (Bitmap) bundle.get("data"); FileOutputStream b = null; File file = new File(Constant.Common.YOUJIAOPIC_PATH); if(!file.exists()){ file.mkdirs(); } String fileName = Constant.Common.YOUJIAOPIC_PATH + "/" + DateUtil.getYearMonthDay() + ".png"; try { b = new FileOutputStream(fileName); bitmap.compress(Bitmap.CompressFormat.PNG, 100, b);// 把数据写入文件 } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { b.flush(); b.close(); } catch (IOException e) { e.printStackTrace(); } } return fileName; } }
// 从本地SD卡获取图片 private void getPicForSDCard() { publish_PicLayout.setVisibility(View.GONE); Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); intent.putExtra("return-data", true); startActivityForResult(intent, 0); } // 调用系统的相机获取图片 private void setToCamera() { publish_PicLayout.setVisibility(View.GONE); Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1); }