7 Replies Latest reply on Nov 8, 2017 2:17 AM by 5b3f1948-8a5d-43c1-bb59-9bdfbcd6ea6f

    No onData/onStatus when writing a Module for React Native

    5b3f1948-8a5d-43c1-bb59-9bdfbcd6ea6f

      I'm following the Basic Tutorial but don't get any data feedback at all. What am I doing wrong?

       

      I tried a lot of test projects and ways but can't get it to work. This is the most basic test from react-native for writing a module and the test from your documentation for basic scanning. Also, calling AsyncTask kills and reloads react-native. So dunno what to do about that. Can probably just run them in this thread.

       

      package com.somescanner.SHEScanner;
      
      
      import android.app.AlertDialog;
      import android.content.DialogInterface;
      import android.widget.Toast;
      
      
      import com.symbol.emdk.EMDKManager;
      import com.symbol.emdk.EMDKManager.EMDKListener;
      import com.symbol.emdk.EMDKResults;
      import com.symbol.emdk.barcode.BarcodeManager;
      import com.symbol.emdk.barcode.ScanDataCollection;
      import com.symbol.emdk.barcode.Scanner;
      import com.symbol.emdk.barcode.Scanner.DataListener;
      import com.symbol.emdk.barcode.Scanner.StatusListener;
      import com.symbol.emdk.barcode.ScannerException;
      import com.symbol.emdk.barcode.ScannerResults;
      import com.symbol.emdk.barcode.StatusData;
      
      
      import com.facebook.react.bridge.NativeModule;
      import com.facebook.react.bridge.ReactApplicationContext;
      import com.facebook.react.bridge.ReactContext;
      import com.facebook.react.bridge.ReactContextBaseJavaModule;
      import com.facebook.react.bridge.ReactMethod;
      
      
      import java.util.ArrayList;
      import java.util.Map;
      import java.util.HashMap;
      
      
      public class SHEScannerModule extends ReactContextBaseJavaModule implements EMDKListener, StatusListener, DataListener {
      
      
          private EMDKManager emdkManager = null;
          private BarcodeManager barcodeManager = null;
          private Scanner scanner = null;
      
      
          private static final String DURATION_SHORT_KEY = "SHORT";
          private static final String DURATION_LONG_KEY = "LONG";
      
      
          public SHEScannerModule(ReactApplicationContext reactContext) {
              super(reactContext);
          }
      
      
          @Override
          public String getName() {
              return "ToastExample";
          }
      
      
          @Override
          public void initialize() {
              Toast.makeText(getReactApplicationContext(), "initialize", Toast.LENGTH_SHORT).show();
              EMDKResults results = EMDKManager.getEMDKManager(
                      getReactApplicationContext(), this);
          }
      
      
          @Override
          public Map<String, Object> getConstants() {
              final Map<String, Object> constants = new HashMap<>();
              constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT);
              constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG);
              return constants;
          }
      
      
          @ReactMethod
          public void show(String message, int duration) {
              Toast.makeText(getReactApplicationContext(), message, duration).show();
          }
      
      
          @Override
          public void onClosed() {
              // TODO Auto-generated method stub
          }
      
      
          @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();
              }
      
      
              // Toast to indicate that the user can now start scanning
              Toast.makeText(getReactApplicationContext(),
                      "Press Hard Scan Button to start scanning...",
                      Toast.LENGTH_SHORT).show();
          }
      
      
          @Override
          public void onData(ScanDataCollection scanDataCollection) {
              Toast.makeText(getReactApplicationContext(), "Got Data", Toast.LENGTH_SHORT).show();
          }
      
      
          @Override
          public void onStatus(StatusData statusData) {
              Toast.makeText(getReactApplicationContext(), "onStatus", Toast.LENGTH_SHORT).show();
          }
      
      
          // Method to initialize and enable Scanner and its listeners
          private void initializeScanner() throws ScannerException {
              if (scanner == null) {
                  // Get the Barcode Manager object
                  barcodeManager = (BarcodeManager) this.emdkManager
                          .getInstance(EMDKManager.FEATURE_TYPE.BARCODE);
                  // Get default scanner defined on the device
                  scanner = barcodeManager.getDevice(BarcodeManager.DeviceIdentifier.DEFAULT);
                  // Add data and status listeners
                  scanner.addDataListener(this);
                  scanner.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.
                  scanner.triggerType = Scanner.TriggerType.HARD;
                  // Enable the scanner
                  scanner.enable();
                  // 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.
                  scanner.read();
              }
          }
      }