Quickly Suspend Scanning in Your App with DataWedge
Most applications will need to temporarily disable the barcode scanner during their lifecycle. There are two ways to achieve this with DataWedge, both using the ScannerInputPlugin API: Enable / Disable or Resume / Suspend:
Enable / Disable:
Enable / Disable can be called at any time
Intent dwIntent = new Intent();
dwIntent.setAction("com.symbol.datawedge.api.ACTION");
// Enable
dwIntent.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "ENABLE_PLUGIN");
// or Disable
dwIntent.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "DISABLE_PLUGIN");
sendBroadcast(dwIntent);
Resume / Suspend:
Resume / Suspend is much quicker but Suspend can only be called when the scanner is in the SCANNING
or WAITING
state
Intent dwIntent = new Intent();
dwIntent.setAction("com.symbol.datawedge.api.ACTION");
// Resume
dwIntent.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "RESUME_PLUGIN");
// or Suspend
if (okToSuspend)
dwIntent.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "SUSPEND_PLUGIN");
sendBroadcast(dwIntent);
You can determine the scanner state using the GetScannerStatus or RegisterForNotification APIs:
// RegisterForNotification
@Override
protected void onResume()
{
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction("com.symbol.datawedge.api.NOTIFICATION_ACTION");
filter.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(myBroadcastReceiver, filter);
}
private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("com.symbol.datawedge.api.NOTIFICATION_ACTION"))
{
if (intent.hasExtra("com.symbol.datawedge.api.NOTIFICATION"))
{
Bundle extras = intent.getBundleExtra("com.symbol.datawedge.api.NOTIFICATION");
String notificationType = extras.getString("NOTIFICATION_TYPE");
if (notificationType != null && notificationType.equals("SCANNER_STATUS"))
{
// We have received a change in Scanner status
String scannerStatus = extras.getString("STATUS");
if (scannerStatus.equals("WAITING") || scannerStatus.equals("SCANNING"))
okToSuspend = true;
else
okToSuspend = false;
}
}
}
}
};
A simple project to demonstrate these API calls is available from https://github.com/darryncampbell/DataWedge-Quick-Suspend-Scanner
As can be seen from the gif below or from this demo video, it is much quicker resuming the scanner compared to enabling it.
Darryn Campbell