安卓如何调用系统相机拍照并把照片存在指定位置?
时间: 2023-12-30 09:05:38 浏览: 34
在Android中,要调用系统相机拍照可以使用Intent,以下是一个简单的示例:
```java
private static final int REQUEST_IMAGE_CAPTURE = 1;
private String currentPhotoPath;
// 调用系统相机拍照
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 确保有相机应用可以处理该 intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// 创建一个文件来保存拍摄的照片
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// 错误处理
}
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.example.android.fileprovider",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
}
// 创建图片文件
private File createImageFile() throws IOException {
// 创建一个唯一的文件名
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName,
".jpg",
storageDir
);
// 保存当前图片路径
currentPhotoPath = image.getAbsolutePath();
return image;
}
// 处理拍照结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
// 图片保存在 currentPhotoPath 中,你可以在这里做你想做的事情
// 例如:将图片路径存储到数据库中,将图片显示在ImageView中等等
}
}
```
在上述代码中,`dispatchTakePictureIntent` 方法创建了一个 `ACTION_IMAGE_CAPTURE` 的 Intent,然后使用 `startActivityForResult` 方法启动系统相机应用。在 `createImageFile` 方法中,我们创建一个唯一的文件名,并将照片文件保存到 `/Pictures` 目录下。当相机应用拍摄完照片后,我们可以在 `onActivityResult` 方法中处理照片结果,照片会保存在 `currentPhotoPath` 变量中,你可以在这里对照片进行处理。
需要注意的是,如果你想把照片保存到指定位置,你需要在创建照片文件时指定文件路径。在示例代码中,我们使用了 `FileProvider` 来获得一个可以共享的 URI,以便将文件路径传递给相机应用。如果你想将照片保存到指定的文件夹中,你需要修改 `createImageFile` 方法中的 `storageDir` 变量。