打开新片段时取消绑定/关闭所有 cameraX 组件

Posted

技术标签:

【中文标题】打开新片段时取消绑定/关闭所有 cameraX 组件【英文标题】:Unbind/close all cameraX components when opening new fragment 【发布时间】:2021-07-19 05:52:25 【问题描述】:
private Executor executor = Executors.newSingleThreadExecutor();
captureImage.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View v) 

        imageCapture.takePicture(executor, new ImageCapture.OnImageCapturedCallback() 
            @SuppressLint("UnsafeExperimentalUsageError")
            @Override
            public void onCaptureSuccess(@NonNull ImageProxy image) 

                getActivity().runOnUiThread(new Runnable() 
                    @Override
                    public void run() 
                        cameraProvider.unbind(preview);
                    
                );

                FragmentCroppImage fragment2 = new FragmentCroppImage();
                FragmentManager fragmentManager =  getFragmentManager();
                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.replace(R.id.frameLHaupt, fragment2);
                fragmentTransaction.commit();

            

            @Override
            public void onError(@NonNull ImageCaptureException exception) 
                exception.printStackTrace();
            
        );
    
);

我上面有一个简单的代码。当我拍照时,我会打开新片段。 没问题,但问题是当我返回 cameraX fragment (popbackstack) 时收到以下错误:Attempting to bind too many ImageCapture or VideoCapture instances

研究后,我阅读了以下答案:answer 我需要解绑我所做的 cameraX 组件,但我研究了同样的错误。

所以现在我被困住了。可能是什么原因?看来我需要在图像捕获之前取消绑定元素?

【问题讨论】:

【参考方案1】:

我解决了这个问题: 我只解绑了预览。解除绑定每个组件解决了这个问题:

getActivity().runOnUiThread(new Runnable() 
  @Override
  public void run()  cameraProvider.unbindAll();   
);

【讨论】:

以上是关于打开新片段时取消绑定/关闭所有 cameraX 组件的主要内容,如果未能解决你的问题,请参考以下文章

CameraX 库如何打开/关闭手电筒?

HTML代码片段

HTML代码片段

单击新按钮时如何关闭所有其他div?

在应用关闭时单击 Firebase 通知后打开特定的活动/片段

mac 8080端口被占用怎么po