启动android手机相机,相册,就是两个Intent。
protected void photoGraph() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileName = System.currentTimeMillis() + "";
//输出数据,必须要有,不然不能带回数据
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "/" + fileName + ".jpg")));
startActivityForResult(intent, Config.RequestCode.PHOTOHRAPH);
}
这是获取手机相机的intent。必须要有那个putExtra。不然拍完照没有数据返回,就等于什么都没有。白做了这个操作。后面的文件存储路径、文件的名字,都是自己命名,想存在哪里就存在哪里。我记得我前面好像有一篇里面有文件存储位置的代码,给出来过。可以去看一下,选择自己想存哪里。
protected void photoAlbum() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(Config.ImageType.IMAGE_UNSPECIFIED);
startActivityForResult(intent, Config.RequestCode.PHOTOZOOM);
}
这个是获取手机相册的代码,那个setType是设置照片的类型。我这里表示所有类型的照片都可以。
/**
* 裁剪照片
* @param uri 照片的本地路劲
*/
private void zoomPic(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, Config.ImageType.IMAGE_UNSPECIFIED);
intent.putExtra("crop", true); // 有这句才能裁剪图片
intent.putExtra("scale", true); // 允许缩放
intent.putExtra("scaleUpIfNeeded", true);// 如果小于要求输出大小,就放大
intent.putExtra("return-data", true);// 不返回缩略图
// 设置宽高比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// 剪裁后的图片大小
intent.putExtra("outputX", 300);
intent.putExtra("outputY", 300);
startActivityForResult(intent, Config.RequestCode.ALBUMRESOULT);
}
private void saveMyBitmap(String bitName, Bitmap mBitmap) {
File f = new File(bitName);
try {
FileOutputStream fOut = null;
f.createNewFile();
fOut = new FileOutputStream(f);
mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
fOut.flush();
fOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
这个就不多说了,注释写的很清楚每句代码是什么意思。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (Config.RequestCode.PHOTOHRAPH == requestCode) { // 手机相机的请求结果
File picture = new File(Environment.getExternalStorageDirectory() + "/" + fileName + ".jpg");
zoomPic(Uri.fromFile(picture)); // 通过拍照保存的照片来找uri,进行缩放图片
} else if (Config.RequestCode.PHOTOZOOM == requestCode) {// 相册,缩放图片
if (data != null) {
zoomPic(data.getData()); // 通过intent带的数据找uri
} else {
return;
}
} else if (Config.RequestCode.ALBUMRESOULT == requestCode) {
if (data != null) {
Bundle extras = data.getExtras();
if (null != extras) {
Bitmap photo = extras.getParcelable("data");
Drawable drawable = new BitmapDrawable(photo);
//裁剪之后照片的本地路径,之后的操作都通过这个路径,项目里面上传服务器之类的
bitName = Environment.getExternalStorageDirectory() + "/" + System.currentTimeMillis() + ".jpg";
saveMyBitmap(bitName, photo);
iv.setVisibility(View.VISIBLE);
iv.setBackgroundDrawable(drawable); //显示到ImageView
}
} else {
return;
}
}
}
真的没有啥好讲的,我的注释里面写的很清楚。