java - CameraX PreviewView 不显示任何内容

标签 java android android-camerax

我遵循了这些教程: https://developer.android.com/training/camerax/preview , https://proandroiddev.com/update-android-camerax-4a44c3e4cdcc 我第一次运行应用程序时,预览工作正常,但在我旋转屏幕后,一切都坏了。我重新安装了应用程序,但预览不再起作用

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));

关于java - CameraX PreviewView 不显示任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60978235/

相关文章:

java - 添加到链表的尾部

android - 无法解析符号 AppCompatActivity

android - Jetpack 的 Camerax - 是否有拍摄连拍图像或保存 DNG 文件的功能?

android - Camerax 在服务中运行。如何在前台服务中获取生命周期所有者或在没有它的情况下运行?

java - Vaadin 选择所有用户

java - 后退按钮导致 NullPointerException

java - 如何在 Codename One GUI Builder 应用程序中使用后退导航?

android - NPE 在运行 Android 5.1 的 OnePlus One 上的 getSupportActionBar()

android - Google Maps v2 - 设置我的位置并放大

android-camerax - 获取cameraProviderFuture时CameraX崩溃