AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle(R.string.action_puthead)
.setIcon(android.R.drawable.btn_star)
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0: // 调用系统相册
setCarmeListener();
break;
case 1: // 调用系统相机
setPaiZhaoLinterer();
break;
default:
break;
}
}
}).create();
return dialog;
}
这一段代码基本上就是一个简单的对话框的创建。 和其中对话框中点击事件的响应方法。
private void setCarmeListener() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, IMAGEURL);
}
private void setPaiZhaoLinterer() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, getCameraTempFile());
startActivityForResult(Intent.createChooser(intent, "选择图片"), PAIZHAO);
}
这个是点击item的事件方法使用startActivityforResult回调返回图片的Uri
Intent.ACTION_GET_CONTENT
这个是通过settype()来确定调用具体的应用
intent.addCategory(Intent.CATEGORY_OPENABLE);
是说将要打开的acitiivy会通过类似浏览器的连接 安全的打开
intent.setType("image/*");
是强制将要显示的类型
MediaStore.ACTION_IMAGE_CAPTURE
是调用系统的相机
getCameraTempFile()
/**
* 拍照时候的保存图片的命名
* @return
*/
private Uri getCameraTempFile() {
String state = Environment.getExternalStorageState();
// 判断是不是有sd卡
if (state.equals(Environment.MEDIA_MOUNTED)) {
File file = new File(PATH);
if (!file.exists()) {
file.mkdirs();
}
} else {
Toast.makeText(MainActivity.this, "没有SD卡", Toast.LENGTH_SHORT)
.show();
return null;
}
// 给图片的命名
String timeStr = new SimpleDateFormat("yyyyMMddHHmmss")
.format(new Date());
String imageStr = "ve_cn" + timeStr + ".png";
nameFile = new File(PATH + imageStr);
Uri uri = Uri.fromFile(nameFile);
return uri;
}
/**
获取外部存取设备的绝对路径加上自己指定的路径
private static final String PATH = Environment
.getExternalStorageDirectory().getAbsolutePath()
+ "/OSChina/Portrait/";
/**回调方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (null == data) {
return;
}
if (requestCode == IMAGEURL || requestCode == PAIZHAO) {
// 拍照或者选择图片返回图片的Uri
Uri uri = data.getData();
//重新剪切图片
setPic(uri);
} else if (requestCode == LOAD_IAMGE) {
if (null != cropUri) {
ivContent.setImageURI(cropUri);
}
}
}
/**
* 剪切图片
*
* @param uri
*/
private void setPic(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("output", getUploadTempFile(uri));
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);// 裁剪框比例
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", CROP);// 输出图片大小
intent.putExtra("outputY", CROP);
intent.putExtra("scale", true);// 去黑边
intent.putExtra("scaleUpIfNeeded", true);// 去黑边
startActivityForResult(intent, LOAD_IAMGE);
}
// 获取剪切之后的图片
private Uri getUploadTempFile(Uri data) {
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
File file = new File(PATH);
if (!file.exists()) {
file.mkdirs();
}
} else {
Toast.makeText(MainActivity.this, "没有SD卡", Toast.LENGTH_SHORT)
.show();
return null;
}
String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss")
.format(new Date());
String thePath = getAbsolutePathFromNoStandardUri(data);
// 如果是标准Uri
if (isEmpty(thePath)) {
thePath = getAbsoluteImagePath(data);
}
String ext = getFileFormat(thePath);
ext = isEmpty(ext) ? "jpg" : ext;
// 照片命名
String cropFileName = "osc_crop_" + timeStamp + "." + ext;
// 裁剪头像的绝对路径
protraitPath = PATH + cropFileName;
protraitFile = new File(protraitPath);
Log.e("info", "------>" + protraitFile.getPath());
// if(!protraitFile.exists()){
// protraitFile.mkdir();
// }
cropUri = Uri.fromFile(protraitFile);
return cropUri;
}
private boolean isEmpty(String input) {
if (input == null || "".equals(input))
return true;
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (c != ' ' && c != '\t' && c != '\r' && c != '\n') {
return false;
}
}
return true;
}
/**
* 通过uri获取文件的绝对路径
*
* @param uri
* @return
*/
private String getAbsoluteImagePath(Uri uri) {
String imagePath = "";
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = MainActivity.this.managedQuery(uri, proj, // Which
null, // WHERE clause; which rows to return (all rows)
null, // WHERE clause selection arguments (none)
null); // Order-by clause (ascending by name)
if (cursor != null) {
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.getCount() > 0 && cursor.moveToFirst()) {
imagePath = cursor.getString(column_index);
}
}
return imagePath;
}
/**
* 获取文件扩展名
*
* @param fileName
* @return
*/
public String getFileFormat(String fileName) {
if (isEmpty(fileName))
return "";
int point = fileName.lastIndexOf('.');
return fileName.substring(point + 1);
}