从相册或相机选择照片

import java.io.File;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.widget.ImageView;
import android.widget.Toast;

/**
 * 从相册或相机选择照片 权限:WRITE_EXTERNAL_STORAGE (写外部存储器)
 * 
 * @author Spoon
 * 
 */
public class SelectPicture {
	/* 图库标记 */
	private static final int PHOTO_REQUEST_GALLERY = 0x001;
	/* 相机标记 */
	private static final int PHOTO_REQUEST_CAREMA = 0x002;
	/* 裁剪标记 */
	private static final int PHOTO_REQUEST_CUT = 0x003;
	/* 文件名 */
	private static final String PHOTO_FILE_NAME = "fileName";

	private File tempFile = null;

	private Context mContext;

	/**
	 * 构造方法
	 * 
	 * @param context
	 */
	public SelectPicture(Context context) {
		this.mContext = context;
	}

	/**
	 * 从相册获取
	 */
	public void galleryPicture() {
		Intent intent = new Intent(Intent.ACTION_PICK);
		intent.setType("image/*");
		((Activity) mContext).startActivityForResult(intent,
				PHOTO_REQUEST_GALLERY);
	}

	/**
	 * 从相机获取
	 */
	public void cameraPicture() {
		Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
		if (hasSdcard()) {
			tempFile = new File(Environment.getExternalStorageDirectory(),
					PHOTO_FILE_NAME);
			Uri uri = Uri.fromFile(tempFile);
			intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
		}
		((Activity) mContext).startActivityForResult(intent,
				PHOTO_REQUEST_CAREMA);
	}

	/**
	 * 剪切图片
	 * 
	 * @param uri
	 */
	private void cropPicture(Uri uri) {
		// 裁剪图片意图
		Intent intent = new Intent("com.android.camera.action.CROP");
		intent.setDataAndType(uri, "image/*");
		intent.putExtra("crop", "true");
		// 裁剪框的比例,1:1
		intent.putExtra("aspectX", 2);
		intent.putExtra("aspectY", 1);
		// 裁剪后输出图片的尺寸大小
		intent.putExtra("outputX", 500);
		intent.putExtra("outputY", 250);

		intent.putExtra("outputFormat", "JPEG");// 图片格式
		intent.putExtra("noFaceDetection", true);// 取消人脸识别
		intent.putExtra("return-data", true);
		// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT
		((Activity) mContext).startActivityForResult(intent, PHOTO_REQUEST_CUT);
	}

	/**
	 * 处理返回结果
	 * 
	 * @param requestCode
	 * @param data
	 */
	public void disposeResult(int requestCode, Intent data, ImageView imageView) {

		switch (requestCode) {
		case PHOTO_REQUEST_GALLERY:
			// 从相册返回的数据
			if (data != null) {
				// 得到图片的全路径
				Uri uri = data.getData();
				cropPicture(uri);
			}
			break;
		case PHOTO_REQUEST_CAREMA:
			// 从相机返回的数据
			if (hasSdcard()) {
				cropPicture(Uri.fromFile(tempFile));
			} else {
				Toast.makeText(mContext, "未找到存储卡,无法存储照片!", 0).show();
			}
			break;
		case PHOTO_REQUEST_CUT:
			// 从剪切图片返回的数据
			if (data != null) {
				Bitmap bitmap = data.getParcelableExtra("data");
				imageView.setImageBitmap(bitmap);
			}
			try {
				// 将临时文件删除
				tempFile.delete();
			} catch (Exception e) {
				e.printStackTrace();
			}
			break;

		default:
			break;
		}

	}

	/**
	 * 判断SD卡是否存在
	 * 
	 * @return
	 */
	public static boolean hasSdcard() {
		if (android.os.Environment.getExternalStorageState().equals(
				android.os.Environment.MEDIA_MOUNTED)) {
			return true;
		} else
			return false;
	}

}
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


转载于:https://my.oschina.net/spoon2014/blog/419934

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值