android 拍照到相册
时间: 2023-08-18 08:09:56 浏览: 40
在Android中,拍照并将照片保存到相册可以分为以下几个步骤:
1. 创建一个用于存储拍摄照片的File对象,可以使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)获取相册目录。
2. 在AndroidManifest.xml文件中添加相机和读写SD卡的权限。
3. 调用系统相机应用拍照,并将拍摄的照片保存到指定的File对象中。
4. 将拍摄的照片添加到相册中,可以使用MediaScannerConnection.scanFile()方法刷新相册。
下面是一个示例代码:
```java
private static final int REQUEST_CODE_CAPTURE = 1;
private File photoFile;
private void capturePhoto() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
try {
photoFile = createImageFile();
} catch (IOException ex) {
ex.printStackTrace();
}
if (photoFile != null) {
Uri photoUri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", photoFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(intent, REQUEST_CODE_CAPTURE);
}
}
}
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File imageFile = File.createTempFile(imageFileName, ".jpg", storageDir);
return imageFile;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_CAPTURE && resultCode == RESULT_OK) {
if (photoFile != null) {
// 刷新相册
MediaScannerConnection.scanFile(this, new String[]{photoFile.getAbsolutePath()}, null, null);
}
}
}
```
这段代码会打开系统相机应用,拍照后将照片保存到相册,并刷新相册以显示新的照片。注意,在Android 7.0及以上版本中,需要使用FileProvider来获取照片的URI,否则会导致FileUriExposedException异常。