0 Replies Latest reply on Mar 20, 2018 9:58 AM by Vivek Henriques

    MC40 emdk scanner arrayIndexOutOfBounds Error

    Vivek Henriques

      Hi im developing a wrapper for the MC40 devices we have.

       

      The MX Version is as follows:

      OSX Version : TI.51.5.2.10

      MXMF Version : 5.3.2.0

      Android Version : 5.1.1

      EMDK Service Version (On Device) : 5.0.3.0

       

      The error that i keep getting

      03-20 21:59:46.758 7888-7888/com.test.omscp W/System.err: java.lang.ArrayIndexOutOfBoundsException: length=10; index=316909920
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at com.symbol.emdk.EMDKManager.getInstance(EMDKManager.java:221)
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at com.test.omscp.emdk.EMDKScannerClass.initializeScanner(EMDKScannerClass.java:74)
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at com.test.omscp.emdk.EMDKScannerClass.onOpened(EMDKScannerClass.java:44)
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at com.symbol.emdk.EMDKServiceConnection.notifyonConnected(EMDKServiceConnection.java:124)
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at com.symbol.emdk.EMDKServiceConnection.onServiceConnected(EMDKServiceConnection.java:104)
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1208)
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1225)
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at android.os.Looper.loop(Looper.java:135)
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5254)
      03-20 21:59:46.759 7888-7888/com.test.omscp W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
      03-20 21:59:46.760 7888-7888/com.test.omscp W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
      03-20 21:59:46.760 7888-7888/com.test.omscp W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
      03-20 21:59:46.760 7888-7888/com.test.omscp W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
      

       

       

      My Code is as follows:

       

      public class EMDKScannerClass implements EMDKListener, StatusListener, DataListener {
          // Declare a variable to store EMDKManager object
          private EMDKManager emdkManager = null;
          // Declare a variable to store Barcode Manager object
          private BarcodeManager barcodeManager = null;
      // Declare a variable to hold scanner device to scan
          private Scanner scannerEMDK = null;
      
          public EMDKScannerClass() {
              EMDKResults results = EMDKManager.getEMDKManager(OMSCPApplication.getGlobalContext(), this);
              if (results.statusCode != EMDKResults.STATUS_CODE.SUCCESS) {
                  Logger.d("Status: ", "EMDKManager object request failed!");
              }
          }
          @Override
          public void onOpened(EMDKManager emdkManager) {
              this.emdkManager = emdkManager;       
      try {
                  // Call this method to enable Scanner and its listeners
                  initializeScanner();
              } catch (ScannerException e) {
                  e.printStackTrace();
              }
          }
      
          @Override
          public void onClosed() {}
      
      
          @Override
          public void onData(ScanDataCollection scanDataCollection) { }
      
      
          @Override
          public void onStatus(StatusData statusData) {}
      
          /**
           * Method to initialize and enable Scanner and its listeners
           */
      private void initializeScanner() throws ScannerException {
              if (scannerEMDK == null) {
                  // Get the Barcode Manager object
                  barcodeManager = (BarcodeManager) this.emdkManager
                          .getInstance(EMDKManager.FEATURE_TYPE.BARCODE);
      
                  if (barcodeManager != null) {
                      // Get default scanner defined on the device
                      scannerEMDK = barcodeManager.getDevice(BarcodeManager.DeviceIdentifier.DEFAULT);
                      // Add data and status listeners
                      scannerEMDK.addDataListener(this);
                      scannerEMDK.addStatusListener(this);
                      // Hard trigger. When this mode is set, the user has to manually
                      // press the trigger on the device after issuing the read call.
                      scannerEMDK.triggerType = Scanner.TriggerType.HARD;
                      // Enable the scanner
                      try {
                          scannerEMDK.enable();
                          Logger.d("Status", "Scanner started.");
                      } catch (ScannerException e) {
                          Logger.d("Status", "Scanner initialization failed.");
                          e.printStackTrace();
                      }
      
                      // IMP : setConfig will apply ONLY after scanner is enabled
                      ScannerConfig config = scannerEMDK.getConfig();
                      config.decoderParams.upce0.convertToUpca = true;
                      scannerEMDK.setConfig(config);
      
                      // Starts an asynchronous Scan. The method will not turn ON the
                      // scanner. It will, however, put the scanner in a state in which
                      // the scanner can be turned ON either by pressing a hardware
                      // trigger or can be turned ON automatically.
                      scannerEMDK.read();
                  } else {
                      Logger.d("EMDK BarcodeManager Null.");
                  }
              }
          }}
      

       

      public class ScanEvents {
          private static ScanEvents scanBarcodeEvent;
          private ScanListener scanBarcodeListener;
      
      
          public static ScanEvents getInstance() {
              if (scanBarcodeEvent == null) {
                  scanBarcodeEvent = new ScanEvents();
              }
              return scanBarcodeEvent;
          }
      
          public ScanEvents() {
              scanBarcodeEvent = this;
          }
      
          /**
           * Set scanner listener.
           */
          public void setScanner(ScanListener barcodeListener) {
              scanBarcodeListener = barcodeListener;
          }
      
          /**
           * Method to receive barcode.
           */
          public void onScanned(String data) {
              if (scanBarcodeListener != null) {
                  scanBarcodeListener.onScannedValue(data);
              }
          }
      
          /**     
           * Interface to implemented for listening for scan events.
           */
          public interface ScanListener {
              void onScannedValue(String scanVal);
          }}
      
      

       

      In my onCreate i initialize the scanner as follows

      ScanEvents.getInstance().setScanner(MainActivity.this);
      new EMDKScannerClass();