Android系列之调用系统相机

在这次的开发中使用到了调用相机的功能,记录如下:

调用系统相机,获取照片方法如下:

1
2
3
4
5
6
7
File outputImage = new File(filename); //需要具体的文件名称和路径
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
imageUri = Uri.fromFile(outputImage);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

以上的代码虽然可以获取照片,但是却也什么都做不了,因为,我们可能需要对这些照片进行额外的操作,比如放到特定的文件夹,或者缩放,
或者裁剪。

将照片放到特定的位置

如果只是调用 Environment.getExternalStorageState() ,这会将照片直接保存在 SD 卡的根目录,下面的代码可以将照片保存到 SD
卡的任意地方,如果目录不存在,就会创建一个新的目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private File createOutputFile(String path, String fileName) {
String storageStatus = Environment.getExternalStorageState();
if(Environment.MEDIA_REMOVED.equals(storageStatus)) {
Log.i(TAG, "SD 卡不存在");
return null;
}
File pictureDir = new File(Environment.getExternalStorageDirectory(), path);
if(! pictureDir.exists()) {
if(! pictureDir.mkdirs()) {
Log.i(TAG, "目录创建失败");
}
}
File file = new File(pictureDir, fileName);
return file;
}

对照片进行裁剪

以下的代码可以启动一个裁剪器,对刚刚拍好的照片利用系统相机的功能进行裁剪:

1
2
3
4
5
6
7
8
9
10
11
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("scale", true);
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true);