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 getConstants() { final Map 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(); } } }
No onData/onStatus when writing a Module for React Native |
1 Replies
Is onOpened() ever getting called? I suspect the lack of EMDKManager.getEMDKManager(...) is causing the issue: samples-emdkforandroid-6_6/MainActivity.java at BarcodeSample1 · Zebra/samples-emdkforandroid-6_6 · GitHub
I have not used the Barcode API with ReactNative myself but I don't see why it shouldn't work as long as the EMDK library is referenced (which it must be or you'd get build errors) and you are running on a Zebra device.