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

时间:2015-09-12 10:04:37

标签: android barcode-scanner

我开发了扫描条形码的应用程序。我的应用程序是带有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;
    }
}

Fragment2:

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显示黑屏。如果我删除调用Fragment2的{​​{1}}代码,Scandit SDK将正常工作。 我该怎么办?下面的图片是问题屏幕:

  1. 片段1:
  2. enter image description here

    1. Fragment2:
    2. enter image description here

1 个答案:

答案 0 :(得分:1)

正如评论中所指出的,当您离开片段时,您将需要停止扫描。

这是因为Fragment在简单导航时没有破坏其视图。因此,只要您持续使用该引用,就不会收集对barcodePicker的引用。

相机不允许多个信号源连接到它,因此在尝试在其他地方使用之前,您必须断开连接。