在应用程序的 2 个片段中使用 Scandit BarcodeScanner

Using Scandit BarcodeScanner in 2 fragment of an application

我开发了一个扫描条码的应用程序。我的应用程序是一个带有 2 个选项卡的 Android TabView 应用程序。我想在它们中添加条形码扫描仪。

我的代码如下:

片段 1:

public class WebServiceFragment extends Fragment {

    RelativeLayout scanServiceView;
    ScanditSDKAutoAdjustingBarcodePicker barcodePicker;



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if(container == null) {
            return null;
        }

        View v = inflater.inflate(R.layout.webservice_layout, container, false);

        scanServiceView = (RelativeLayout)v.findViewById(R.id.scanserviceview);
        barcodePicker = new ScanditSDKAutoAdjustingBarcodePicker(getActivity(), "<My Scandit SDK Key 1>", ScanditSDKAutoAdjustingBarcodePicker.CAMERA_FACING_BACK);
        barcodePicker.startScanning();

        scanServiceView.addView(barcodePicker);

        return v;
    }
}

片段 2:

public class CMCSMOFragment extends Fragment {

    RelativeLayout scanSMOView;
    ScanditSDKAutoAdjustingBarcodePicker barcodePicker;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        if(container == null) {
            return null;
        }
        View v = inflater.inflate(R.layout.cmcsmo_layout, container, false);

        scanSMOView = (RelativeLayout)v.findViewById(R.id.scansmoview);
        barcodePicker = new ScanditSDKAutoAdjustingBarcodePicker(getActivity(), "<My Scandit SDK Key 2>", ScanditSDKAutoAdjustingBarcodePicker.CAMERA_FACING_BACK);
        barcodePicker.startScanning();

        scanSMOView.addView(barcodePicker);

        return v;
    }
}

但是当我构建时,只有 Fragment2 显示用于扫描的相机视图。 Fragment1 显示黑屏。如果我删除调用 Scandit SDKFragment2 代码,Fragment1 将正常工作。 这种情况我该怎么办?下图是问题屏幕:

  1. 片段 1:

  1. 片段 2:

正如评论中所指出的,您需要在离开 Fragment 时停止扫描。

这是因为 Fragment 在离开时没有破坏其视图。因此,只要您保留该引用,就不会收集您对 barcodePicker 的引用。

相机不允许连接多个信号源,因此您必须先断开与它的连接,然后才能尝试在其他地方使用它。