我想要覆盖照片,但每张照片旁边都出现 (2)、(3) 等
我尝试设置永久保存位置,但没有成功。这是我用来捕获和保存照片的代码:
voidbindPreview(@NonNullProcessCameraProvidercameraProvider){ 预览预览 = new Preview.Builder().build(); CameraSelectorcameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build(); ImageAnalysis imageAnalysis = new ImageAnalysis.Builder().build(); ImageCapture.Builder 构建器 = new ImageCapture.Builder();
final ImageCapture imageCapture = builder.setTargetRotation(this.getWindowManager().getDefaultDisplay().getRotation()).build();
preview.setSurfaceProvider(binding.cameraPreviewView.getSurfaceProvider());
cameraProvider.bindToLifecycle((LifecycleOwner) this, lensFacing, preview, imageAnalysis, imageCapture);
String relativePath = Environment.DIRECTORY_PICTURES + File.separator + "Photometer" + File.separator + "captured_image";
// Create temporary file
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "captured_image");
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, relativePath);
// Use ContentResolver to insert the image and get the content URI
ContentResolver contentResolver = getContentResolver();
imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
if (buttonState == 1) {
Timer my_timer = new Timer();
my_timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
ImageCapture.OutputFileOptions outputFileOptions = new ImageCapture.OutputFileOptions.Builder(
contentResolver, imageUri, null
).build();
runOnUiThread(new Runnable() {
@Override
public void run() {
if (buttonState == 0) {
return;
}
try {
imageCapture.takePicture(outputFileOptions, executor, new ImageCapture.OnImageSavedCallback() {
@Override
public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
}
@Override
public void onError(@NonNull ImageCaptureException error) {
error.printStackTrace();
}
});
FastAnalyzePhoto();
if (timerCancel == 1) {
cameraProvider.unbindAll();
my_timer.cancel();
binding.realtimeProgress.setVisibility(GONE);
startCamera();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
}, 0, IMAGE_ANALYSE_REFRESH_DELAY_MS);
}
}
您仍在通过
contentResolver.insert
调用插入新图像。
要更新现有图像,请获取 OutputStream 并用它构建 OutputFileOptions:
ContentResolver contentResolver = getContentResolver();
try {
// Open an OutputStream to write into the existing image's Uri
OutputStream outputStream = contentResolver.openOutputStream(existingImageUri);
...