Create a barcode scanner

  1. Import the required classes.
    import java.util.*;
    
    import net.rim.device.api.barcodelib.*;
    import net.rim.device.api.ui.*;
    import net.rim.device.api.ui.container.*;
    
    import com.google.zxing.*;
  2. Create a class to run the application by extending UiApplication.
    public final class BarcodeScanDemo extends UiApplication
    { 
  3. Create a constructor for the class, and display a BarcodeScanDemoScreen object.
        public BarcodeScanDemo()
        {
            pushScreen(new BarcodeScanDemoScreen());
        }
  4. Create the main method that starts the application.
        public static void main(String[] args)
        {
            new BarcodeScanDemo().enterEventDispatcher();
        }
    }
  5. Define a screen for your class that extends the MainScreen class.
    final class BarcodeScanDemoScreen extends MainScreen
    {
  6. Create a constructor for the screen.
        public BarcodeScanDemoScreen() 
        { 
  7. Create a BarcodeDecoderListener object to handle the data that is received when a barcode is scanned. In it, implement barcodeDecoded() to process the raw data that is sent by the decoder.
            BarcodeDecoderListener listener = new BarcodeDecoderListener()
            {
                public void barcodeDecoded( String rawText )
                {
                    // Do something with the raw text
                }
            };
  8. Create a Hashtable to store decoding hints in.
            Hashtable hints = new Hashtable();
  9. Create a new Vector object to store barcode formats in.
            Vector formats = new Vector();
  10. Add the BarcodeFormat.QR_CODE constant to the Vector object using Vector.addElement(Object obj). You can add more than one constant (hint) to a Vector object.
            formats.addElement(BarcodeFormat.QR_CODE);
  11. Invoke Hashtable.put(Object key, Object value), and add the Vector object to the hash table. The DecodeHintType.POSSIBLE_FORMATS constant is used to specify that the hints contained in the Vector object are barcode formats. Other constants for decoding hints can be found in the com.google.zxing.DecodeHintType class.
            hints.put(DecodeHintType.POSSIBLE_FORMATS, formats);
  12. Construct a BarcodeDecoder object to decode data received from the camera's viewfinder into usable raw data. Pass the Hashtable object into it.
            BarcodeDecoder decoder = new BarcodeDecoder( hints ); 
  13. Create a try block, and construct a MainScreen object to contain the camera viewfinder.
            try
            {
                MainScreen screen = new MainScreen();
  14. Construct a BarcodeScanner object, and pass the BarcodeDecoder and BarcodeListener objects into it. Invoke BarcodeScanner.getVideoControl() to return a VideoControl object. Invoke VideoControl.setDisplayFullScreen(true) to set the video's display to full screen.
                BarcodeScanner scanner = new BarcodeScanner( decoder,
                                             listener );
                scanner.getVideoControl().setDisplayFullScreen( true );
  15. Invoke Screen.add(Field field) to add the barcode scanner's view finder to the screen, then invoke UiApplication.pushScreen(Screen screen) to display the viewfinder.
                screen.add( scanner.getViewFinder() );
                UiApplication.getUiApplication().pushScreen( screen );
  16. Start the barcode scanner by invoking BarcodeScanner.startScan(). Close the try block.
                scanner.startScan();
            }
  17. Open a catch block to catch any errors that may occur.
            catch (Exception e)
            {
                // Catch errors here
            }
        }
    }

Code sample: scan a barcode

import java.util.*;

import net.rim.device.api.barcodelib.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.container.*;

import com.google.zxing.*;

public final class BarcodeScanDemo extends UiApplication
{
    public static void main(String[] args)
    {
        new BarcodeScanDemo().enterEventDispatcher();
    }

    public BarcodeScanDemo()
    {
        pushScreen(new BarcodeScanDemoScreen());
    }
}

final class BarcodeScanDemoScreen extends MainScreen
{
    public BarcodeScanDemoScreen()
    { 
        BarcodeDecoderListener listener = new BarcodeDecoderListener()
        {
            public void barcodeDecoded( String rawText )
            {
                // Do something with the raw text
            }
        };

        Hashtable hints = new Hashtable(1);
        Vector formats  = new Vector(1);
        formats.addElement(BarcodeFormat.QR_CODE);
        hints.put(DecodeHintType.POSSIBLE_FORMATS, formats);

        BarcodeDecoder decoder = new BarcodeDecoder( hints ); 

        try
        {
            MainScreen screen = new MainScreen();
            BarcodeScanner scanner = new BarcodeScanner( decoder, listener );
            scanner.getVideoControl().setDisplayFullScreen( true );
            screen.add( scanner.getViewfinder() );
            UiApplication.getUiApplication().pushScreen( screen );
            scanner.startScan();
        }
        catch (Exception e)
        {
            // Catch errors here
        }
    }
}
Next topic: Hints
Previous topic: Barcode types supported

Was this information helpful? Send us your comments.