Update - March 2018

 

This blog received an overhaul in March 2018 to update the APIs being used and rework the demo application to provide more up to date functionality.

 

DataWedge Intent Interface

DataWedge is a value-add of all Zebra Technologies devices (formally Symbol and Motorola Solutions) that allows barcode capture and configuration without the need to write any code.  This application will demonstrate how to use Android intents to add DataWedge scanning functionality to your application

 

Quick Start - Getting the demo running

This application will demonstrate how to scan barcodes and control Datawedge from a Cordova based application. 

 

>git clone https://github.com/darryncampbell/DataWedgeCordova.git 
>cd DataWedgeCordova 
>cordova platform add android 
Plug in Zebra device Follow instructions under "Configuring Datawedge" (below) 
>cordova run android --device
Scan a barcode

 

If your device supports Datawedge 6.3 or below you will need to complete additional setup, see the Configuring Datawedge section.

 

Bootstrapping

This section walks through the steps to create a new Cordova based application that utilises DataWedge for scanning.

 

Create a cordova application that will run on Android

cordova create DataWedgeCordova com.mycompany.datawedgecordova DataWedgeCordova 
cordova platform add android 

 

We will use a 3rd party plugin to handle sending and receiving Intents to the DataWedge service.  Any plugin capable of sending or receiving generic intents and interpreting the extra bundle into JSON will work:

cordova plugin add https://github.com/darryncampbell/darryncampbell-cordova-plugin-intent.git 

 

Note that a previous version of this blog used different 3rd party plugins which have since been deprecated.  I wrote my own generic plugin to handle intents and released it under MIT to aid customers who wish to integrate DataWedge and Cordova but this should not be considered supported software by Zebra Technologies.

 

Configuring Datawedge

If your device is running Datawedge 6.4 or higher and you just want to run the demo application you can safely skip this section as the demo app will configure the Datawedge profile automatically.

DataWedge can be configured to send intents whenever it scans barcodes, there are more sophisticated ways to configure DataWedge but this section will cover the basics.  More detailed help is available at the official documentation .

 

  • Create a new DataWedge profile (Applications --> DataWedge --> Menu --> New Profile).  This will be the profile that will be active when our Cordova application is in the foreground.  Give it a name e.g. DataWedgeCordova and click into it to configure.
  • The next step requires our Cordova application to have previously run on the device so if you have not already done so:
  • cordova run android
  • Back in DataWedge configuration associate the Cordova application with our DW profile

associate_app.png

  • Scroll down to the Intent Output section of DW configuration and enable intents:
    • Intent Action: com.zebra.cordovademo.ACTION (Note: This action changed with the update to this blog in March 2018)
    • Intent Category: leave blank
    • Intent delivery: Broadcast intent

intent_output_settings.png

 

Adding code to the Cordova application

Some example code from the demo application

 

Listening for intents

Since in the previous section DataWedge was configured to send barcode data to our application via an implicit broadcast intent we can use the 3rd party plugin to register a broadcast receiver:

 

window.plugins.intentShim.registerBroadcastReceiver({
  filterActions: [
    'com.zebra.cordovademo.ACTION', //  Scans
    'com.symbol.datawedge.api.RESULT_ACTION' //  Messages from service
  ],
  filterCategories: [
    'com.android.intent.category.DEFAULT'
  ]
},

function(intent) {
  //  Broadcast received
  console.log('Received Intent: ' + JSON.stringify(intent.extras));
  if (intent.extras["com.symbol.datawedge.data_string"] != null)
  {
    console.log("Scan: " + intent.extras["com.symbol.datawedge.data_string"]);
  }
});

 

Sending intents

DataWedge supports an intent based API documented here. The API supports many functions, code is shown here to initiate a scan without pressing the hardware key but the full demo also shows modifying the enabled decoders and retrieving Datawedge state:

 

To simulate a trigger press:

window.plugins.intentShim.sendBroadcast(
    {
       action: 'com.symbol.datawedge.api.ACTION',
       extras: {   
         'com.symbol.datawedge.api.SOFT_SCAN_TRIGGER': 'TOGGLE_SCANNING'   }
    }, 
    function() {},     
    function() {}
);

 

Now deploy & launch your app.  You are able to scan barcodes and exercise the functionality:

application01.png

 

Feedback

This technique for adding scanning capabilities to a Cordova application represents the most generic possible solution.  We appreciate your developer feedback:

  • Would you prefer a dedicated Cordova plugin for Javascript?
  • Would you like to access EMDK profile functionality through Cordova?
  • Would you rather a dedicated Javascript interface as opposed to relying on third party plugins?
  • Are you interested in JavaScript development outside of Cordova e.g. ReactNative or NativeScript for your Enterprise application

 

Please feel free to raise github issues on the repository or post comments to this blog.