Android CameraX返回成功但未保存图片

Android CameraX返回成功但未保存图片,android,android-camera,android-camerax,Android,Android Camera,Android Camerax,我已经实现了android camerax,但它没有正确地捕获图像,回调返回成功,但无法找到或查看图像 我的实施: private void startCamera(){ final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this); cameraProviderFuture.addListener(new Run

我已经实现了android camerax,但它没有正确地捕获图像,回调返回成功,但无法找到或查看图像

我的实施:

private void startCamera(){
    final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
    cameraProviderFuture.addListener(new Runnable() {
        @Override
        public void run() {
            try {
                ProcessCameraProvider provider = cameraProviderFuture.get();
                bindPreview(provider);
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    }, ContextCompat.getMainExecutor(this));
}

private void bindPreview(@NonNull ProcessCameraProvider cameraProvider){
    Preview preview = new Preview.Builder().build();
    CameraSelector selector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_FRONT).build();
    ImageCapture.Builder builder = new ImageCapture.Builder();
    final ImageCapture imageCapture = builder.setTargetRotation(this.getWindowManager().getDefaultDisplay().getRotation()).build();
    preview.setSurfaceProvider(cameraView.createSurfaceProvider());
    cameraProvider.bindToLifecycle(this,selector,preview,imageCapture);
    btnCapture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            selfieFile = new File(getFilesDir(),"attendance.jpg");
            OutputFileOptions outputFileOptions = new OutputFileOptions.Builder(selfieFile).build();
            imageCapture.takePicture(outputFileOptions, executor, new ImageCapture.OnImageSavedCallback() {
                @Override
                public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Glide.with(CameraActivity.this).load(outputFileResults.getSavedUri()).into(capturedImage);
                            //updateUI(false);
                        }
                    });
                }

                @Override
                public void onError(@NonNull ImageCaptureException exception) {

                }
            });
        }
    });
}
private void startCamera(){
final ListenableFuture cameraProviderFuture=ProcessCameraProvider.getInstance(this);
cameraProviderFuture.addListener(新的Runnable(){
@凌驾
公开募捐{
试一试{
ProcessCameraProvider provider=cameraProviderFuture.get();
绑定预览(提供者);
}捕获(例外e){
e、 printStackTrace();
}
}
},ContextCompat.getMainExecutor(this));
}
私有void bindPreview(@NonNull ProcessCameraProvider cameraProvider){
Preview Preview=新建Preview.Builder().build();
CameraSelector selector=新建CameraSelector.Builder().requirensFacing(CameraSelector.LENS_FACING_FRONT).build();
ImageCapture.Builder=新建ImageCapture.Builder();
final ImageCapture ImageCapture=builder.setTargetRotation(this.getWindowManager().getDefaultDisplay().getRotation()).build();
preview.setSurfaceProvider(cameraView.createSurfaceProvider());
cameraProvider.bindToLifecycle(此、选择器、预览、图像捕获);
btnCapture.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
selfieFile=新文件(getFilesDir(),“attention.jpg”);
OutputFileOptions OutputFileOptions=新建OutputFileOptions.Builder(selfieFile.build();
takePicture(outputFileOptions,executor,newimagecapture.OnImageSavedCallback(){
@凌驾
public void onImageSaved(@NonNull ImageCapture.OutputFileResults OutputFileResults){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
Glide.with(CameraActivity.this).load(outputFileResults.getSavedUri())到(capturedImage)中;
//更新(假);
}
});
}
@凌驾
public void onError(@NonNull ImageCaptureException异常){
}
});
}
});
}
我尝试加载Uri.fromFile(),也尝试改为获取imageproxy并转换为位图,但仍然存在这些问题。任何帮助都将不胜感激。

在Per的文档中,此方法仅在MediaStore支持
ImageCapture.OutputFileOptions
时返回值,即当您使用
ImageCapture.OutputFileOptions.Builder(ContentResolver,Uri,ContentValues)
时返回值

您使用的是
ImageCapture.OutputFileOptions.Builder(文件)
,这意味着您在调用
ImageCapture.OutputFileResults.getSavedUri()时应该会收到
null

我对Glide不够熟悉,所以我不确定为什么使用
Uri.fromFile()
加载图像不起作用。您可以尝试直接在ImageView上设置图像,以查看是否误用了Glide:

capturedImage.setImageURI(Uri.fromFile(selfieFile))
根据的文档,此方法仅在MediaStore支持
ImageCapture.OutputFileOptions
时返回值,即使用
ImageCapture.OutputFileOptions.Builder(ContentResolver,Uri,ContentValues)
时返回值

您使用的是
ImageCapture.OutputFileOptions.Builder(文件)
,这意味着您在调用
ImageCapture.OutputFileResults.getSavedUri()时应该会收到
null

我对Glide不够熟悉,所以我不确定为什么使用
Uri.fromFile()
加载图像不起作用。您可以尝试直接在ImageView上设置图像,以查看是否误用了Glide:

capturedImage.setImageURI(Uri.fromFile(selfieFile))