android 带有cameraX的媒体商店不会覆盖保存的照片

yvfmudvl  于 2024-01-04  发布在  Android
关注(0)|答案(1)|浏览(268)

我想照片被覆盖,但相反(2),(3)等出现在每张照片旁边
我尝试设置永久保存位置,但不起作用。这是我用来捕获和保存照片的代码:
void bindPreview(@ NoncodeProcessCameraProvider cameraProvider){ Preview preview = new Preview.Builder().build(); CameraCapture. Builder builder = new CameraCapture.Builder().requireLensFacing(CameraCapture.LENS_FACING_BACK).build(); ImageAnalysis imageAnalysis = new ImageAnalysis.Builder().build(); ImageCapture.Builder builder = new ImageCapture.Builder();

  1. final ImageCapture imageCapture = builder.setTargetRotation(this.getWindowManager().getDefaultDisplay().getRotation()).build();
  2. preview.setSurfaceProvider(binding.cameraPreviewView.getSurfaceProvider());
  3. cameraProvider.bindToLifecycle((LifecycleOwner) this, lensFacing, preview, imageAnalysis, imageCapture);
  4. String relativePath = Environment.DIRECTORY_PICTURES + File.separator + "Photometer" + File.separator + "captured_image";
  5. // Create temporary file
  6. ContentValues contentValues = new ContentValues();
  7. contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, "captured_image");
  8. contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
  9. contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, relativePath);
  10. // Use ContentResolver to insert the image and get the content URI
  11. ContentResolver contentResolver = getContentResolver();
  12. imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
  13. if (buttonState == 1) {
  14. Timer my_timer = new Timer();
  15. my_timer.scheduleAtFixedRate(new TimerTask() {
  16. @Override
  17. public void run() {
  18. ImageCapture.OutputFileOptions outputFileOptions = new ImageCapture.OutputFileOptions.Builder(
  19. contentResolver, imageUri, null
  20. ).build();
  21. runOnUiThread(new Runnable() {
  22. @Override
  23. public void run() {
  24. if (buttonState == 0) {
  25. return;
  26. }
  27. try {
  28. imageCapture.takePicture(outputFileOptions, executor, new ImageCapture.OnImageSavedCallback() {
  29. @Override
  30. public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
  31. }
  32. @Override
  33. public void onError(@NonNull ImageCaptureException error) {
  34. error.printStackTrace();
  35. }
  36. });
  37. FastAnalyzePhoto();
  38. if (timerCancel == 1) {
  39. cameraProvider.unbindAll();
  40. my_timer.cancel();
  41. binding.realtimeProgress.setVisibility(GONE);
  42. startCamera();
  43. }
  44. } catch (Exception ex) {
  45. ex.printStackTrace();
  46. }
  47. }
  48. });
  49. }
  50. }, 0, IMAGE_ANALYSE_REFRESH_DELAY_MS);
  51. }
  52. }

字符串

cig3rfwq

cig3rfwq1#

您仍然在使用contentResolver.insert调用插入新图像。
要更新现有映像,请获取OutputStream并使用它构建OutputFileOptions:

  1. ContentResolver contentResolver = getContentResolver();
  2. try {
  3. // Open an OutputStream to write into the existing image's Uri
  4. OutputStream outputStream = contentResolver.openOutputStream(existingImageUri);
  5. ...

字符串

相关问题