Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CameraX预览视图不显示任何内容_Java_Android_Android Camerax - Fatal编程技术网

Java CameraX预览视图不显示任何内容

Java CameraX预览视图不显示任何内容,java,android,android-camerax,Java,Android,Android Camerax,我遵循了以下教程: , 我第一次运行应用程序的预览工作,但在我旋转屏幕后,所有损坏。我重新安装了应用程序,但预览不再有效 public class ScanActivity extends AppCompatActivity { private ListenableFuture<ProcessCameraProvider> cameraProviderFuture; private PreviewView cameraView; private Preview imagePr

我遵循了以下教程: , 我第一次运行应用程序的预览工作,但在我旋转屏幕后,所有损坏。我重新安装了应用程序,但预览不再有效

public class ScanActivity extends AppCompatActivity {


private ListenableFuture<ProcessCameraProvider> cameraProviderFuture;

private PreviewView cameraView;
private Preview imagePreview;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_scan);
    cameraView = findViewById(R.id.cameraView);
    cameraProviderFuture = ProcessCameraProvider.getInstance(this);
    if(isPermissionsGranted()){
        cameraView.post(new Runnable() {
            @Override
            public void run() {
                startCamera();
            }
        });
    }
    else{
        ActivityCompat.requestPermissions(ScanActivity.this,
                new String[]{Manifest.permission.CAMERA},PERMISSION_REQUEST_CODE);
    }
}

private void startCamera(){
  imagePreview = new Preview.Builder()
           .setTargetRotation(cameraView.getDisplay().getRotation())
           .build();
  imagePreview.setSurfaceProvider(cameraView.getPreviewSurfaceProvider());
  final CameraSelector cameraSelector = new CameraSelector.Builder()
                            .requireLensFacing(CameraSelector.LENS_FACING_BACK)
                            .build();
  cameraProviderFuture.addListener(() -> {
      try {
          ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
          cameraProvider.bindToLifecycle(ScanActivity.this,cameraSelector,imagePreview);
      } catch (ExecutionException|InterruptedException e) {
          e.printStackTrace();
      }
  },ContextCompat.getMainExecutor(this));

}

}

在初始化相机之前不应构建用例,ProcessCameraProvider.getInstance异步执行此操作。因此,您可能会遇到在初始化完成之前构建的预览用例,这就是预览无法工作的原因。您的代码应该是这样的

cameraProviderFuture.addListener(() -> {
    try {
        ProcessCameraProvider cameraProvider = cameraProviderFuture.get(context);
        Preview preview = new Preview.Builder().build();
        preview.setSurfaceProvider(previewView.getSurfaceProvider());   
        cameraProvider.bindToLifecycle(lifecycleOwner, selector, preview);
    } catch (Exception exception) {
        exception.printStackTrace();
    }
}, ContextCompat.getMainExecutor(context));

在初始化相机之前不应构建用例,这是ProcessCameraProvider.getInstance异步执行的操作。因此,您可能会遇到在初始化完成之前构建的预览用例,这就是预览无法工作的原因。您的代码应该是这样的

cameraProviderFuture.addListener(() -> {
    try {
        ProcessCameraProvider cameraProvider = cameraProviderFuture.get(context);
        Preview preview = new Preview.Builder().build();
        preview.setSurfaceProvider(previewView.getSurfaceProvider());   
        cameraProvider.bindToLifecycle(lifecycleOwner, selector, preview);
    } catch (Exception exception) {
        exception.printStackTrace();
    }
}, ContextCompat.getMainExecutor(context));

如何为CameraX perivew创建自定义Ui作为条形码Ui?如何为CameraX perivew创建自定义Ui作为条形码Ui?