设置 CameraX 图像捕获文件路径

3
我将文件路径设置为以下内容: File file = new File(Environment.getExternalStorageDirectory() + "/" + System.currentTimeMillis() + ".png"); 这行代码会创建一个以当前时间戳命名的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: 无法写入或关闭文件


你有使用那个位置的权限吗?请注意,在Android 10及以上版本中,即使有权限也无法在那里写入,所以你真的需要考虑将图像放在其他地方。 - CommonsWare
2
这就是了,谢谢。我只是把它改成了 getExternalFilesDir(Environment.DIRECTORY_PICTURES) - user12193751
2个回答

3
根据最新的 Android R(API 级别 30)和 Android 存储使用案例和最佳实践 的更新,您可以使用下面的代码将图像保存在应用程序的缓存存储中。
File file = new File(getContext().getExternalCacheDir() + File.separator + System.currentTimeMillis() + ".png");

2

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

您可以在清单文件和运行时请求 WRITE_EXTERNAL_STORAGE 权限,以允许您在 Android 9 及以下版本中写入所需位置。Android 10 及以上版本不支持普通应用程序在外部存储根目录中创建任意目录。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接