B4A Library Barcode Scanner - 100% embedded within B4A (15 Feb 2016 : New library files in Post #105)

The attached project wraps this Github project. It is a barcode scanner based on the ZXING project. I have successfully scanned the following 1D and 2D barcodes:
1. Code 39
2. Code 93
3. Code 128
4. Two-of-Five Interleaved (TFI)
5. EAN13
6. EAN8
7. PDF417
8. QR Code
9. Aztec Code
10. Codabar

It is 100% embedded within the B4A project via a CustomView. Thus, you can add buttons, background images, background colors, labels, textviews, or whatever you like to the activity via the designer or via code. It does not have all the bells and whistles that the ZXING project offers (i.e ability to set the laser color etc) but it works 100% within B4A. It does not take over control of the B4A activity - set the size (width / height / left / top) of the CustomView in the B4A code and that will be the size of your barcode View Finder. Add buttons to start and stop the scanner. It is as simple as that.

For as long as what the scanner is active it will scan 1D/2D barcodes i.e no need to stop and start the scanner to start scanning a new barcode. Just point the scanner at the next barcode to scan.

I have added the following events to the B4A project:
1. scanresult - here you can get the decoded string/text result when a successful scan occurred
2. scanner_started - this event is raised when the scanner is activated via B4A code
3. scan_error - sorry, but have not seen this event in action yet as I have had no miss scans thus far
4. scanner_stopped - this event is raised when the scanner is stopped.

There are a number of files in the B4A project's Object/res/..... folders that are set to read only. Keep them like that.

There are permissions added to the B4A manifest - make sure you take note of it should you start a new B4A project.

You will need core-3.1.0.jar and android-support-v4.jar to be in your additional library folder. I have zipped them together - you can download them from HERE. Extract them from the zipped file and copy them to your additional library folder.

1.png


2.png


Some sample code:

B4X:
#Region  Project Attributes
    #ApplicationLabel: zxScannerLiveView
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: landscape
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Private zxslv As zxScannerLiveView
    Private b1 As Button
    Private b2 As Button
    Private l1 As Label

End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("main")

    zxslv.Initialize("zxslv")

    Activity.AddView(zxslv, 50%x - 45%y, 5%y, 90%y, 90%y)

    zxslv.HudVisible = True
    zxslv.PlaySound = True
    zxslv.Visible = False

End Sub

Sub Activity_Resume


End Sub

Sub Activity_Pause (UserClosed As Boolean)

    zxslv.Visible = False
    zxslv.stopScanner

End Sub

Sub b1_Click

    zxslv.Visible = True
    zxslv.startScanner

End Sub
Sub b2_Click

    zxslv.Visible = False
    zxslv.stopScanner
    l1.Text = ""

End Sub

Sub zxslv_scanresult

    Log(zxslv.ScanResult)
    l1.Text = zxslv.ScanResult

End Sub

Sub zxslv_scanner_started

    Log("Scanner Started")

End Sub

Sub zxslv_scan_error

    Log("Scan Error")

End Sub

Sub zxslv_scanner_stopped

    Log("Scanner stopped")

End Sub


And this will add a coloured frame around the view finder - making use of panels via B4A code:

B4X:
#Region  Project Attributes
    #ApplicationLabel: zxScannerLiveView
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: landscape
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Private zxslv As zxScannerLiveView
    Private b1 As Button
    Private b2 As Button
    Private l1 As Label
    Private l2, l3, l4, l5 As Label

End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("main")

    zxslv.Initialize("zxslv")
    Dim framecolor As Int = Colors.Red

    l2.Initialize("")
    l3.Initialize("")
    l4.Initialize("")
    l5.Initialize("")

    Activity.AddView(zxslv, 50%x - 45%y, 5%y, 90%y, 90%y)
    Activity.AddView(l2, 50%x - 45%y - 1%y, 4%y, 1%y, 92%y)
    Activity.AddView(l3, 50%x + 45%y, 4%y, 1%y, 92%y)
    Activity.AddView(l4, 50%x - 45%y - 1%y, 4%y, 91%y, 1%y)
    Activity.AddView(l5, 50%x - 45%y - 1%y, 5%y + 90%y, 91%y, 1%y)


    l2.Color = framecolor
    l2.Visible = False

    l3.Color = framecolor
    l3.Visible = False

    l4.Color = framecolor
    l4.Visible = False

    l5.Color = framecolor
    l5.Visible = False

    zxslv.HudVisible = True
    zxslv.PlaySound = True
    zxslv.Visible = False


End Sub

Sub Activity_Resume


End Sub

Sub Activity_Pause (UserClosed As Boolean)

    zxslv.Visible = False
    zxslv.stopScanner

    l2.Visible = False
    l3.Visible = False
    l4.Visible = False
    l5.Visible = False

End Sub

Sub b1_Click

    zxslv.Visible = True
    zxslv.startScanner

    l2.Visible = True
    l3.Visible = True
    l4.Visible = True
    l5.Visible = True

End Sub
Sub b2_Click

    zxslv.Visible = False
    zxslv.stopScanner
    l1.Text = ""

    l2.Visible = False
    l3.Visible = False
    l4.Visible = False
    l5.Visible = False



End Sub

Sub zxslv_scanresult

    Log(zxslv.ScanResult)
    l1.Text = zxslv.ScanResult

End Sub

Sub zxslv_scanner_started

    Log("Scanner Started")

End Sub

Sub zxslv_scan_error

    Log("Scan Error")

End Sub

Sub zxslv_scanner_stopped

    Log("Scanner stopped")

End Sub

It will look like this:

3.png


zxScannerLiveView
Author: Github: Dmitri Livotov, Wrapper: Johan Schoeman
Version: 1



zxScannerLiveView
Events:

  • scan_error ( )
  • scanner_started ( )
  • scanner_stopped ( )
  • scanresult ( )
Fields:
  • BACK As String
  • FRONT As String
  • ba As BA
  • mfrontOrBack As String
Methods:
  • BringToFront
  • DesignerCreateView (base As PanelWrapper, lw As LabelWrapper, props As Map)
  • Initialize (EventName As String)
  • Invalidate
  • Invalidate2 (arg0 As Rect)
  • Invalidate3 (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
  • IsInitialized As Boolean
  • RemoveView
  • RequestFocus As Boolean
  • SendToBack
  • SetBackgroundImage (arg0 As Bitmap)
  • SetColorAnimated (arg0 As Int, arg1 As Int, arg2 As Int)
  • SetLayout (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
  • SetLayoutAnimated (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int, arg4 As Int)
  • SetVisibleAnimated (arg0 As Int, arg1 As Boolean)
  • startScanner
    Starts scanner, using device default camera
  • stopScanner
    Stops currently running scanner
  • toggleFlash
Properties:
  • BackgroudImage As String [write only]
  • Background As Drawable
  • CameraToUse As String [write only]
  • Color As Int [write only]
  • Enabled As Boolean
  • Height As Int
  • HudVisible As Boolean [write only]
  • Left As Int
  • PlaySound As Boolean [write only]
  • SameCodeRescanProtectionTime As Long [write only]
  • ScanResult As String [read only]
  • Tag As Object
  • Top As Int
  • Visible As Boolean
  • Width As Int
You can download and test any posting of mine in this thread but if you want to use it then you need to
 

Attachments

  • zxScannerLiveViewLibFiles.zip
    44.9 KB · Views: 3,342
  • b4aZXscannerLiveView.zip
    19 KB · Views: 3,278
Last edited:

Johan Schoeman

Expert
Licensed User
Longtime User
Front and back camera switch would be nice. For example the Nexus 7 only has front camera. Tablets can be used for loyalty checkins etc. and the Nexus 7 is suitable for that.
Here you go... Select from the Spinner if you want to use the front or back facing camera and then start the scanner. Posting the updated B4A library files (see post #1 for Dropbox link to other library files required) and a B4A project demonstrating its use. Note that the torch/flash will probably only work with the camera that it belongs to (in most cases the back facing camera).

The attached project and library is LIKEware. You can download it and test it but if you want to use it you must donate a LIKE by clicking on the LIKE button :))).

6.png


7.png


Thanks @Mahares....;)
 

Attachments

  • b4aZXscannerLiveViewWithTorchSelectCamera.zip
    19.6 KB · Views: 567
  • zxScannerLiveViewLibFiles.zip
    47.5 KB · Views: 570

Johan Schoeman

Expert
Licensed User
Longtime User
I tested the example, it scan fast, but when orientation change to portrait, it was very slow to scan, most of the time, failed to scan at all.

I changed the size of zxScannerLiveView, and noticed, with different size, scan speed also changed. Is there an optimum size to get better scan speed?
See if the attached project and new library files make a difference in the scanning speed when in portrait mode. See comments added in the code dated 12 Nov 2015. It allows you to set the time between consecutive scans of the same barcode and also allows you to add your own "target" that will be inside the scanner when the scanner is active (see pic below for target that I have added to the code from png file in Object/res/drawable folder)

Sample code:

B4X:
#Region  Project Attributes
    #ApplicationLabel: zxScannerLiveView
    #VersionCode: 1
    #VersionName:
    'SupportedOrientations possible values: unspecified, landscape or portrait.
    #SupportedOrientations: landscape
    #CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: True
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    Private zxslv As zxScannerLiveView
    Private b1 As Button
    Private b2 As Button
    Private l1 As Label
    Private l2, l3, l4, l5 As Label
   
    Private b3 As Button
    Private scanStarted As Boolean = False
   
    Private Spinner1 As Spinner
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("main")
   
    zxslv.Initialize("zxslv")
    Dim framecolor As Int = Colors.Red
   
    l2.Initialize("")
    l3.Initialize("")
    l4.Initialize("")
    l5.Initialize("")
   
    Activity.AddView(zxslv, 50%x - 45%y, 5%y, 90%y, 90%y)
    Activity.AddView(l2, 50%x - 45%y - 1%y, 4%y, 1%y, 92%y)
    Activity.AddView(l3, 50%x + 45%y, 4%y, 1%y, 92%y)
    Activity.AddView(l4, 50%x - 45%y - 1%y, 4%y, 91%y, 1%y)   
    Activity.AddView(l5, 50%x - 45%y - 1%y, 5%y + 90%y, 91%y, 1%y)
   
    zxslv.BackgroudImage = "target"                          'ADDED 12 Nov 2015 - use this to add your own image/aim/target to the scanner - see target.png that I have added
                                                             'to the Objects/res/drawable folder (it should preferably have a transparent background)
   
    Spinner1.AddAll(Array As String("FRONT", "BACK"))   
   
   
    l2.Color = framecolor
    l2.Visible = False
   
    l3.Color = framecolor
    l3.Visible = False
   
    l4.Color = framecolor
    l4.Visible = False   
   
    l5.Color = framecolor
    l5.Visible = False

    zxslv.HudVisible = True
    zxslv.PlaySound = True
    zxslv.Visible = False
   
    zxslv.SameCodeRescanProtectionTime = 500              'ADDED 12 NOV 2015 - interval before the same code will be scanned again (milliseconds)
   
   
End Sub

Sub Activity_Resume
   

End Sub

Sub Activity_Pause (UserClosed As Boolean)
   
    zxslv.Visible = False
    zxslv.stopScanner
   
    l2.Visible = False
    l3.Visible = False
    l4.Visible = False   
    l5.Visible = False       
   
End Sub

Sub b1_Click
   
    If Spinner1.SelectedItem = "BACK" Then
        zxslv.CameraToUse = zxslv.BACK   'or FRONT (i.e it sets the camera to use. If you specify FRONT and there is no FRONT camera it will revert to the back camera
    Else
        zxslv.CameraToUse = zxslv.FRONT  'or BACK (i.e it sets the camera to use. If you specify FRONT and there is no FRONT camera it will revert to the back camera
    End If
   
                                            
    zxslv.Visible = True
    zxslv.startScanner
   
    l2.Visible = True
    l3.Visible = True
    l4.Visible = True
    l5.Visible = True       
   
End Sub
Sub b2_Click
   
    zxslv.Visible = False
    zxslv.stopScanner
    l1.Text = ""
   
    l2.Visible = False
    l3.Visible = False
    l4.Visible = False
    l5.Visible = False       
   
End Sub

Sub zxslv_scanresult
   
    Log(zxslv.ScanResult)
    l1.Text = zxslv.ScanResult
   
End Sub

Sub zxslv_scanner_started
   
    scanStarted = True
    Log("Scanner Started")
   
End Sub

Sub zxslv_scan_error
   
    Log("Scan Error")
   
End Sub

Sub zxslv_scanner_stopped
    scanStarted = False
    Log("Scanner stopped")
   
End Sub
Sub b3_Click
   
    If scanStarted = True Then
      zxslv.toggleFlash
    End If 
   
End Sub

8.png
 

Attachments

  • b4aZXscannerLiveViewSpeedUp.zip
    76.2 KB · Views: 479
  • zxScannerLiveViewLibFiles.zip
    47.8 KB · Views: 494

incendio

Well-Known Member
Licensed User
Longtime User
Hi Johan,
Just tested your example with LG G2 phone.

On landscape mode, speed is very good, but on portrait mode, it is very2 slow.

There are a few things I noticed:
1) sometimes scanner reads not on its focus, for example, from your picture above, the focus is on WIKIPEDIA barcode, but sometimes it could reads ABCDE12345.
2) it reads twice, after I scan the barcode & point scanner to another object(which is not a barcode), phone beep again

For scanning speed on portrait mode, could it be related with auto focus(though already tested, but still no effect).
 
Last edited:

incendio

Well-Known Member
Licensed User
Longtime User
I think the cause for delay is not in portrait/landscape mode.

It was the size of zxScannerLiveView, on your example (with landscape mode) it it an optimum size on my phone.

When change to portrait mode, zxScannerLiveView size also changes and speed also affected.

When I have on computer, I will try to match size both on portrait/landscape mode an see the result.
 

Johan Schoeman

Expert
Licensed User
Longtime User
Attached are new B4A library files that sort out a non-scan issue for Datamatrix 2D codes. Dmitri Livotov, author of the original Github project, was kind enough to address and sort out this issue when I brought it to his attention. This update requires no changes to the B4A project/code - the changes are internal to the library only.

zxScannerLiveView
Author:
Github: Dmitri Livotov, Wrapper: Johan Schoeman
Version: 1
  • zxScannerLiveView
    Events:
    • scan_error ( )
    • scanner_started ( )
    • scanner_stopped ( )
    • scanresult ( )
    Fields:
    • BACK As String
    • FRONT As String
    • ba As BA
    • mfrontOrBack As String
    Methods:
    • BringToFront
    • DesignerCreateView (base As PanelWrapper, lw As LabelWrapper, props As Map)
    • Initialize (EventName As String)
    • Invalidate
    • Invalidate2 (arg0 As Rect)
    • Invalidate3 (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
    • IsInitialized As Boolean
    • RemoveView
    • RequestFocus As Boolean
    • SendToBack
    • SetBackgroundImage (arg0 As Bitmap)
    • SetColorAnimated (arg0 As Int, arg1 As Int, arg2 As Int)
    • SetLayout (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int)
    • SetLayoutAnimated (arg0 As Int, arg1 As Int, arg2 As Int, arg3 As Int, arg4 As Int)
    • SetVisibleAnimated (arg0 As Int, arg1 As Boolean)
    • startScanner
      Starts scanner, using device default camera
    • stopScanner
      Stops currently running scanner
    • toggleFlash
    Properties:
    • BackgroudImage As String [write only]
    • Background As Drawable
    • CameraToUse As String [write only]
    • Color As Int [write only]
    • Enabled As Boolean
    • Height As Int
    • HudVisible As Boolean [write only]
    • Left As Int
    • PlaySound As Boolean [write only]
    • SameCodeRescanProtectionTime As Long [write only]
    • ScanResult As String [read only]
    • Tag As Object
    • Top As Int
    • Visible As Boolean
    • Width As Int
 

Attachments

  • zxScannerLiveViewLibFiles.zip
    46.3 KB · Views: 505
Last edited:

Bryanne Vega

Member
Licensed User
Longtime User
It's a sad day in my B4A life.

Note:
B4X:
B4A 5.5
Core: 4.92

@Johan Schoeman
Happens only when I try to compile and the Scanner library is selected.

B4X:
B4A version: 5.50
Parsing code.    (0.02s)
Compiling code.    (0.16s)
Compiling layouts code.    (0.01s)
Generating R file.    (0.03s)
Compiling debugger engine code.    (2.03s)
Compiling generated Java code.    Error
Cannot find: C:\Program Files (x86)\Anywhere Software\Basic4android\libraries\core-3.1.0.jar
 
Last edited:

Johan Schoeman

Expert
Licensed User
Longtime User
It's a sad day in my B4A life.

Note:
B4X:
B4A 5.5
Core: 4.92

@Johan Schoeman
Happens only when I try to compile and the Scanner library is selected.

B4X:
B4A version: 5.50
Parsing code.    (0.02s)
Compiling code.    (0.16s)
Compiling layouts code.    (0.01s)
Generating R file.    (0.03s)
Compiling debugger engine code.    (2.03s)
Compiling generated Java code.    Error
Cannot find: C:\Program Files (x86)\Anywhere Software\Basic4android\libraries\core-3.1.0.jar
So let's make it a happy day in your life. Read post #1. There are two files that I have zipped together and that I have uploaded to Dropbox as their respective sizes are such that it can't be uploaded to the forum. The core-3.1.0.jar is not the B4A core file. It is the ZXING core file that you need to download from the Dropbox link. The zipped file in Dropbox also contains a recent version of android-support-v4.jar that you also need to copy to your additional library folder.
 
Last edited:

Johan Schoeman

Expert
Licensed User
Longtime User
Those are not the files uploaded, only the project sample and the project library :/
Directly above the first picture in post #1 is the word HERE in blue and underlined. Click on it. It will take you to Dropbox where the zip file is that contains the other two jar files.
 
Last edited:

Bryanne Vega

Member
Licensed User
Longtime User
Directly above the first picture in post #1 is the word HERE in blue and underlined. Click on it. It will take you to Dropbox where the zip file is that contains the other two jar files.
Spoon fed... gotta stop being fed one day.
  • CodeScanner.Initialize("zxslv")
B4X:
android.content.res.Resources$NotFoundException: Resource ID #0x0
 

Johan Schoeman

Expert
Licensed User
Longtime User
Spoon fed... gotta stop being fed one day.
  • CodeScanner.Initialize("zxslv")
B4X:
android.content.res.Resources$NotFoundException: Resource ID #0x0
If you start a new project then make sure you have the B4A manifest set up correctly as per the project(s) that I have posted else you will see nothing. Also make sure that you copy the necessary files from the /Objects/res folder in the original project(s) to your new project.
 

Douglas Farias

Expert
Licensed User
Longtime User
hi @Johan Schoeman
i m trying to use your lib, my project its on portrait i will use this on protrait, but on your examples the target its not on center.
12277321_835392479913210_611028128_n.jpg


how set this on center?
the scan work but i need scan on red area to work and this is not on center

have a way to set this red area more big and centered?

thx, nice lib, fast
 
Last edited:

Bryanne Vega

Member
Licensed User
Longtime User
If you start a new project then make sure you have the B4A manifest set up correctly as per the project(s) that I have posted else you will see nothing. Also make sure that you copy the necessary files from the /Objects/res folder in the original project(s) to your new project.
Issue resolved by copying the necessary files to the res folder and adding the permissions using the Manifest editor (not directly through the XML file, changes would not save)
 

Bryanne Vega

Member
Licensed User
Longtime User
hi @Johan Schoeman
i m trying to use your lib, my project its on portrait i will use this on protrait, but on your examples the target its not on center.
View attachment 38975

how set this on center?
the scan work but i need scan on red area to work and this is not on center

have a way to set this red area more big and centered?

thx, nice lib, fast


Play with the Initialize a little ? ( Activity.AddView(zxslv, 50%x - 45%y, 5%y, 90%y, 90%y)
 

Johan Schoeman

Expert
Licensed User
Longtime User
hi @Johan Schoeman
i m trying to use your lib, my project its on portrait i will use this on protrait, but on your examples the target its not on center.
View attachment 38975

how set this on center?
the scan work but i need scan on red area to work and this is not on center

have a way to set this red area more big and centered?

thx, nice lib, fast

Douglas, this will centre it vertically
B4X:
    Activity.AddView(zxslv, 5%x, 50%y - 45%x, 90%x, 90%x)

You will have to change the below code in the Designer Script too for the buttons, etc to suite the portrait layout:

B4X:
b1.left = 2%x
b1.Top = 30%y
b1.Width = 15%x
b1.Height = 15%y

b2.Left = 2%x
b2.Top = 55%y
b2.Width = 15%x
b2.Height = 15%y

l1.Left = 50%x + 45%y + 5%y
l1.Top = 35%y
l1.Width = 100%x - (50%x + 45%y + 5%y)
l1.Height = 30%y

b3.Top = 2%y
b3.Width = b2.Width
b3.Height = 15%y
b3.Left = 98%x - b3.Width

Spinner1.Top = b3.Bottom + 5%y
Spinner1.Width = b2.Width
Spinner1.Height = 15%y
Spinner1.Left = 98%x - b3.Width

If you want to enlarge the red rectangle then you need to go find the files in the B4A project's drawable folder and edit it with something like GIMP.
 

Douglas Farias

Expert
Licensed User
Longtime User
yes u is right xD
i need sleep xD

change
B4X:
Activity.AddView(zxslv, 0%y, 0%y, 100%y, 100%y)
to
B4X:
Activity.AddView(zxslv, 0%x, 0%y, 100%x, 100%y)

thx
my error sorry (i need some coffes)
 

Johan Schoeman

Expert
Licensed User
Longtime User
Here is the Java Code for those that might be interested...
You will need to add a libs folder on the same folder level as the the src folder and copy core-3.1.0.jar and android-support-v4.jar into this folder in order to compile the library. These two jar files can be downloaded from the Dropbox link in post #1 of this thread.
 

Attachments

  • TheJavaCode.zip
    29.3 KB · Views: 415
Last edited:

Douglas Farias

Expert
Licensed User
Longtime User
@Johan Schoeman
why this is slow to read a code?

i m trying to read a qr code, but i need stay 7/10 seconds to read, and the camera have focus.
tested on 2 devices. what can is this? i will make a video to show u
sometimes read fast, but only sometimes.


edit
sorry for bad video xD
i m with iphone on one hand and e4 on another xD

look at first scan, this is slow (5s), later is fast i dont know what cause the slow on scan
 
Last edited:

Johan Schoeman

Expert
Licensed User
Longtime User
@Johan Schoeman
why this is slow to read a code?

i m trying to read a qr code, but i need stay 7/10 seconds to read, and the camera have focus.
tested on 2 devices. what can is this? i will make a video to show u
sometimes read fast, but only sometimes.
Douglas, if anything it must be underlying to the Github project that I have wrapped. I am running it on a Samsung S4 mini and it scans like a dream. No delay whatsoever. I have noticed it to be a bit lazy when scanning PDF417 and Aztec codes but I have had very very fast response for QR Codes and all the 1D codes. I have brought the laziness of the PDF417 codes and the Aztec Codes to the attention of Dmitri Livotov, the author of the Github project. If there is an update for it I will amend my lib accordingly and post a new library. But as mentioned above, I get very very good response with it on my S4. No worse than the Icefairy lib that I have modified or that of the QRCP4 project that I have posted on the forum.
 
Last edited:
Top