phonegap-pluginssencha-touch-2.2

Phonegap , Barcode Scanner not working on android


I have done the following to install and use the barcode scanner.

>phonegap plugin add https://github.com/jonathannaguin/BarcodeScanner

this successfully installed the barcode scanner plugin in the phonegap/plugins directory.

Then i built it for android like this

phonegap build android

This also finished successfully. Then i placed this in a sencha touch app using a handler on a text field. But when the field is tapped there is no result. Nothing happens.

Ext.define("Tasks.view.BarcodeField", {
extend: 'Ext.Container',
alias:'widget.barcodeField',

xtype: 'barcodefield',

config: {    
    layout: 'hbox',
    id: 'barcodeField',
    itemId: 'barcodeField',
    items: [
        {
            xtype: 'textfield',
            label: 'Barcode',
            labelWidth: '37.4%',                            
            flex: 4        
        },
        {
            xtype: 'image',
            id : 'barcodeScanner',
            itemId : 'barcodeScanner',
            src: 'resources/images/barcodes.png',
            padding: '6 0 0 0',
            flex: 1,
            listeners: {
                tap: function() {
                    console.log("Starting the barcode Scanner");
                    function success(result) {
                         alert("We got a barcode\n" +
                        "Result: " + result.text + "\n" +
                        "Format: " + result.format + "\n" +
                        "Cancelled: " + result.cancelled);
                    }

                    function fail(error) {
                          alert("Scanning failed: " + error);
                    }

                     cordova.plugins.barcodeScanner.scan(success, fail);
                }
            }               
        }        
    ]        
},

getValue : function() 
{   
    console.log(this.getItems().getAt(0).getValue());
    return this.getItems().getAt(0).getValue();
},
setValue : function(newvalue) {
   this.getItems().getAt(0).setValue(newvalue);
}

});

I see the tap handler is being invoked and the log statement on the console.


Solution

  • I have the call to the barcode plugin to the following and it is working. Instead of calling cordova.plugins i used window.plugins and it works.

    Ext.define("Tasks.view.BarcodeField", {
    extend: 'Ext.Container',
    alias:'widget.barcodeField',
    
    xtype: 'barcodefield',
    
    config: {    
        layout: 'hbox',
        id: 'barcodeField',
        itemId: 'barcodeField',
        items: [
            {
                xtype: 'textfield',
                label: 'Barcode',
                labelWidth: '37.4%',                            
                flex: 4        
            },
            {
                xtype: 'image',
                id : 'barcodeScanner',
                itemId : 'barcodeScanner',
                src: 'resources/images/barcodes.png',
                padding: '6 0 0 0',
                flex: 1,
                listeners: {
                    tap: function() {
                        console.log("Starting the barcode Scanner");
                        function success(result) {
                             alert("We got a barcode\n" +
                            "Result: " + result.text + "\n" +
                            "Format: " + result.format + "\n" +
                            "Cancelled: " + result.cancelled);
                        }
    
                        function fail(error) {
                              alert("Scanning failed: " + error);
                        }
                        window.plugins.barcodeScanner.scan(success, fail);
                        // cordova.plugins.barcodeScanner.scan(success, fail);
                    }
                }               
            }        
        ]        
    },
    
    getValue : function() 
    {   
        console.log(this.getItems().getAt(0).getValue());
        return this.getItems().getAt(0).getValue();
    },
    setValue : function(newvalue) {
       this.getItems().getAt(0).setValue(newvalue);
    }
    

    });