设置 CameraX 图像捕获文件路径

Set CameraX image capture File path

我将文件路径设置为:

File file = new File(Environment.getExternalStorageDirectory() + "/" + System.currentTimeMillis() + ".png");

    ImageCapture.OutputFileOptions outputFileOptions =
            new ImageCapture.OutputFileOptions.Builder(file).build();

    imageCapture.takePicture(outputFileOptions, Executors.newSingleThreadExecutor(),
            new ImageCapture.OnImageSavedCallback() {
                @Override
                public void onImageSaved(ImageCapture.OutputFileResults outputFileResults) {
                    // insert your code here.
                    Log.d("PHOTO", "onImageSaved: saved");
                }
                @Override
                public void onError(ImageCaptureException error) {
                    // insert your code here.
                    Log.d("PHOTO", "onError: " + error);

                }
            });

但出于某种原因,当我单击捕获图像按钮时,它会跳转到 onError 并记录以下内容:

onError: androidx.camera.core.ImageCaptureException: Failed to write or close the file

您的应用需要获得写入所需位置的权限。

您可以在清单和运行时请求 WRITE_EXTERNAL_STORAGE,以允许您在请求的位置写入...直到 Android 9。Android 10 及以后不支持普通应用在外存根目录创建任意目录

您选择getExternalFilesDir()意味着您不需要任何权限。缺点是当您的应用程序被卸载时,您放在那里的文件会被删除。

根据 android R(API 级别 30)和 Android storage use cases and best practices 的最新更新,您可以使用下面的代码将图像保存在应用的缓存中

File file = new File(getContext().getExternalCacheDir() + File.separator + System.currentTimeMillis() + ".png");