Unbind/close 打开新片段时的所有 cameraX 组件
Unbind/close all cameraX components when opening new fragment
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();
}
});
}
});
上面有一个简单的代码。当我拍照时,我打开新片段。
没问题,但问题是当我 return 到 cameraX 片段 (popbackstack) ) 收到以下错误:Attempting to bind too many ImageCapture or VideoCapture instances
.
经过研究,我阅读了以下答案:answer我需要取消绑定我所做的 cameraX 组件,但我研究了同样的错误。
所以现在我卡住了。原因是什么?看来我需要在图像捕获之前取消绑定元素?
我解决了这个问题:
我已经解除绑定只是预览。取消绑定每个组件解决了问题:
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() { cameraProvider.unbindAll(); }
});
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();
}
});
}
});
上面有一个简单的代码。当我拍照时,我打开新片段。
没问题,但问题是当我 return 到 cameraX 片段 (popbackstack) ) 收到以下错误:Attempting to bind too many ImageCapture or VideoCapture instances
.
经过研究,我阅读了以下答案:answer我需要取消绑定我所做的 cameraX 组件,但我研究了同样的错误。
所以现在我卡住了。原因是什么?看来我需要在图像捕获之前取消绑定元素?
我解决了这个问题: 我已经解除绑定只是预览。取消绑定每个组件解决了问题:
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() { cameraProvider.unbindAll(); }
});