Android 在应用程序的2个片段中使用Scandit条形码扫描仪

Android 在应用程序的2个片段中使用Scandit条形码扫描仪,android,barcode-scanner,Android,Barcode Scanner,我开发了一个扫描条形码的应用程序。我的应用程序是一个Android TabView应用程序,有两个选项卡。我想在这两个系统中都添加条形码扫描仪 我的代码如下: 片段1: public class WebServiceFragment extends Fragment { RelativeLayout scanServiceView; ScanditSDKAutoAdjustingBarcodePicker barcodePicker; @Override

我开发了一个扫描条形码的应用程序。我的应用程序是一个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;
    }
}
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;
    }
}
公共类WebServiceFragment扩展片段{
RelativeLayout scanServiceView;
Scanditsdk自动调整条码选择器条码选择器;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
if(容器==null){
返回null;
}
视图v=充气机。充气(R.layout.webservice\u布局,容器,错误);
scanServiceView=(RelativeLayout)v.findViewById(R.id.scanServiceView);
barcodePicker=新的Scanditsdk自动调整barcodePicker(getActivity(),“”,Scanditsdk自动调整barcodePicker.CAMERA\u面朝后);
条形码选择器。开始扫描();
scanServiceView.addView(条形码选择器);
返回v;
}
}
片段2:

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;
    }
}
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;
    }
}
公共类CMCSMOFragment扩展片段{
相对扫描视图;
Scanditsdk自动调整条码选择器条码选择器;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
if(容器==null){
返回null;
}
视图v=充气机。充气(R.layout.cmcsmo_布局,容器,假);
scanSMOView=(RelativeLayout)v.findViewById(R.id.scanSMOView);
barcodePicker=新的Scanditsdk自动调整barcodePicker(getActivity(),“”,Scanditsdk自动调整barcodePicker.CAMERA\u面朝后);
条形码选择器。开始扫描();
scanSMOView.addView(条码选择器);
返回v;
}
}
但当我构建时,只有
Fragment2
显示用于扫描的相机视图<代码>碎片1显示黑屏。如果我删除调用
Scandit SDK
Fragment2
代码,
Fragment1
将正常工作。 我该如何处理这种情况?下图为问题屏幕:

  • 片段1:
  • 片段2:

  • 如注释中指出的,在导航远离片段时,需要停止扫描

    这是因为当简单地导航离开时,片段的视图没有被破坏。因此,只要您保持对条形码选择器的引用,就不会收集到该引用


    摄像机不允许多个源连接到它,因此在尝试在其他地方使用它之前,你必须断开与它的连接。

    你有没有告诉过它停止扫描?@Cheesebaron:你是说当我在碎片之间移动时,我应该停止一个,兄弟?如果这是你的想法,我没有这么做。我试试这个。谢谢你的建议你救了我的命,兄弟^^