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" />