Android进阶篇图片选择功能

在开发过程中,我们一般会碰到图片选择功能。

它包括两部分:一个是通过直接调用系统的相册获取,一个是通过系统相机拍照获取。

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);
    }
原文地址:https://www.cnblogs.com/gongcb/p/2647132.html