B4A Library ZXingLib by icefairy333 - modified by Johan Schoeman (Scan QR Codes and other 1D/2D Barcodes)

Discussion in 'Additional libraries, classes and official updates' started by Johan Schoeman, Jan 7, 2015.

  1. Johan Schoeman

    Johan Schoeman Expert Licensed User

    ScannerActive.png

    See the attached project (with library files in the /files folder of the project). This is based on the original work of @icefairy333. I have modified @icefairy333's library so that it can do the following:

    1. Set the color of the border of the framing rectangle from B4A code
    2. Set the color of the laser from B4A code
    3. Set the color of the mask around the framing rectangle from B4A code
    4. Set the color of the result points from B4A code
    5. Set the color of the final panel being displayed before control is being returned to the B4A project from B4A code
    6. Ability to switch on/off the torch when making use of the back camera scanner by means of the volume up/down buttons. Use the volume up/down buttons to toggle the torch on/off when the scanner is active.

    a. It retains the Portrait /Landscape option as per @icefairy333 's version 1.5 posted in post #1 of his original post.
    b. It retains use of the front / back camera (not sure if it supports all types of devices)

    See post #5 for changes that might be required to the Manifest of the project.

    Edit: Posting JohanIceFairyZxingWidthMod.zip that will allow you to change the width / height of the ViewFinder. New library files are in the /files folder of the attached project. Replace the old lib files with the new ones.

    Edit: Posting JohanIceFairyZxingWidthModAndTextMod.zip that will allow you also add text to the mask around the viewfinder of the scanner.

    Edit: Posting JohanIceFairyZxingWidthTextBitmap.zip that will allow you to also add a bitmap to the mask around the viewfinder of the scanner.

    Edit: Posting JohanIcefairyZxingWidthTextBitmapTouchTorch.zip that retains all previously added functionality but you can now also switch on/off the flash when using the back camera by either using the volume up/down buttons or just touch the screen while the scanner is active.

    Edit: attached file src.zip contains the java source code. It can be compiled into a B4A library with Simple Library Compiler (SLC) as is, provided you set up the directory structure correctly and you set up SLC correctly. See elsewhere in this thread how to do it.

    Edit: Attached JohanIcefairyZxingTimeout.zip with all the previously added functionality but adding an option to specify a timeout duration. Default timeout duration is 15 seconds (should you not specify any timeout duration). Also posting src_2.zip with the amended java source code

    eg of Button1_Click for project in JohanIcefairyZxingTimeout.zip
    Code:
    Sub Button1_Click
      zx.isportrait = 
    True
      zx.useFrontCam = 
    False

      
    'set the timeoutDuration to a very high value (such as 2000000000) if you dont want it to time out
      '2000000000 = 63 years+
      zx.timeoutDuration = 30

      
    'change these factors between 0 and 1 to change the size of the viewfinder rectangle
      'the library will limit the minimum size to 240 x 240 pixels and the maximum to (screen width) x   (screen height) pixels
      zx.theViewFinderXfactor = 0.7
      zx.theViewFinderYfactor = 
    0.5

      zx.theFrameColor = 
    Colors.Blue
      zx.theLaserColor = 
    Colors.Yellow
      zx.theMaskColor = 
    Colors.argb(9500255)
      zx.theResultColor = 
    Colors.Green
      zx.theResultPointColor = 
    Colors.Red

      
    'set the prompt messages
      zx.theTopPromptMessage = "This was done......"
      zx.theTopPromptTextSize = 
    5%y'text size in pixels
      zx.topPromptColor = Colors.Red
      zx.topPromptDistanceFromTop = 
    1%y'pixel distance from top

      zx.theBottomPromptMessage = 
    "Just for fun......"
      zx.theBottomPromptTextSize = 
    5%y'text size in pixels
      zx.bottomPromptColor = Colors.Blue
      zx.bottomPromptDistanceFromBottom = 
    5%y'pixel distance from top

      
    'add a bitmap
      zx.theBitMap = bm
      zx.theBitMapLeft = 
    40%x
      zx.theBitMapTop = 
    10%y
      zx.theBitMapWidth = 
    20%x
      zx.theBitMapHeight = 
    20%x

      zx.BeginScan(
    "myzx")
    End Sub
    Enjoy!

    You can download and test any posting of mine in this thread but if you want to use it then you need to [​IMG]
     

    Attached Files:

    Last edited: Jun 5, 2018
    microbox, Devv, kelevra1602 and 26 others like this.
  2. bluedude

    bluedude Well-Known Member Licensed User

    Interesting. Now add:

    - cancel reader event
    - image/logo above rectangle.

    ...and it would be great!

    On which version of the ZXing library is this based?
     
  3. Johan Schoeman

    Johan Schoeman Expert Licensed User

    The base that I am working from is the source code posted by @icefairy333 in post #1 of his original thread. Reverse engineered his V1.5 to add back the landscape / portrait and front / back cameras and then added code for the colors and the torch when using the back camera. Will look into your remaks above and see if I can amend code to accommodate such.
     
  4. Reids

    Reids Member Licensed User

    Hello Johan, I will write your name in my last exam project as a credits, this really great!! than previous torch update, but black screen issue still occured on my samsung galaxy S III (I'm using cyanogenmod), black screen will appear when app tried to capture the qr code, then I cancel it, open an cancel then black screen, phone must be restarted to get rid of this problem, maybe need to call camera_close() somewhat? it appear camera still in use

    Oh 1 More request. can you display result in bottom of capture screen? so I can capture qr code as batch capture, repositioning rectangle capture also great :)

    Thank You Very Much!
    you and icefairy have great contribution on my final project
    Best Regard from Bali!
     
  5. Johan Schoeman

    Johan Schoeman Expert Licensed User

    I know the below code has a whole lot of additional /unnecessary lines of code in it, but if the attached above project does not work then replace the manifest with the code below. It sorted out a problem that someone else experienced.

    Code:
    'This code will be applied to the manifest file during compilation.
    'You do not need to modify it in most cases.
    'See this link for for more information: http://www.basic4ppc.com/forum/showthread.php?p=78136
    AddManifestText(
    <uses-sdk android:minSdkVersion=
    "4" android:targetSdkVersion="17"/>
    <supports-screens android:largeScreens=
    "true"
        android:normalScreens=
    "true"
        android:smallScreens=
    "true"
        android:anyDensity=
    "true"/>)
    AddManifestText(<uses-feature android:name=
    "android.hardware.telephony" android:required="false" />)
    AddManifestText(<uses-feature android:name=
    "android.hardware.camera" android:required="false" />)
    AddManifestText(<uses-feature android:name=
    "android.hardware.camera.autofocus" android:required="false" />)
    AddManifestText(<uses-feature android:name=
    "android.hardware.camera.flash" android:required="false" />)
    'AddPermission("android.permission.ACCESS_COARSE_LOCATION")
    AddPermission("android.permission.INTERNET")
    AddPermission(
    "android.permission.ACCESS_FINE_LOCATION")
    AddPermission(
    "android.permission.WAKE_LOCK")
    AddPermission(
    "android.permission.DEVICE_POWER")
    'AddPermission("android.permission.ACCESS_COARSE_UPDATES")
    AddPermission("android.permission.READ_PHONE_STATE")
    AddPermission(
    "android.permission.VIBRATE")
    AddPermission(
    "android.permission.CAMERA")
    AddPermission(
    "android.permission.FLASHLIGHT")
    AddPermission(
    "android.hardware.camera")
    SetApplicationAttribute(android:icon, 
    "@drawable/icon")
    SetApplicationAttribute(android:
    label"$LABEL$")
    AddApplicationText(<
    activity android:name="ice.zxing.CaptureActivity"
                android:screenOrientation=
    "portrait" android:configChanges="orientation|keyboardHidden"
                android:theme=
    "@android:style/Theme.NoTitleBar.Fullscreen"
                android:windowSoftInputMode=
    "stateAlwaysHidden">
            </
    activity>)
     
  6. incendio

    incendio Well-Known Member Licensed User

    Hello,

    Thanks for the library.

    Is it possible to change rectangle capture size?
     
  7. Johan Schoeman

    Johan Schoeman Expert Licensed User

    See update in post #1 that will allow you to change the width / height of the View Finder
     
  8. Johan Schoeman

    Johan Schoeman Expert Licensed User

    See post #1. Added an update (JohanIcefairyZxingWidthModAndTextMod.zip) so that one can
    add a prompt message at the top
    add a prompt message at the bottom
    Specify the color of the text (separately for top and bottom)
    Specify the text size (separately for top and bottom)
    Specify the position of the top and bottom message relative to the top and the bottom.

    This update incorporates all previous updates of this project. New library files are in the /files folder of the project.
     
    Last edited: Jan 8, 2015
    DonManfred likes this.
  9. bluedude

    bluedude Well-Known Member Licensed User

    Great stuff, you think you could add a cancel event? If not, I need to change some of my code.
     
  10. Johan Schoeman

    Johan Schoeman Expert Licensed User

    Busy adding the bitmap. Will post it in a few minutes. Won't get to cancel event today - project for another day.
     
    Last edited: Jan 8, 2015
  11. Reids

    Reids Member Licensed User

    Still waiting result displayed at capture screen, after capture complete it don't back to layout but still at capture screen ready for next record
     
  12. Johan Schoeman

    Johan Schoeman Expert Licensed User

    It is something for future development Edwin.
     
    Reids likes this.
  13. Johan Schoeman

    Johan Schoeman Expert Licensed User

    The attached zipped file contains new library files for the project (jar and xml). It was created on request of one of the members (JTM). It allows you to switch the flash/torch on/off (when making use of the rear camera) by touching the screen. It retains the on/off capability of the flash/torch by making use of the volume up/down button. The two options are working in conjunction with one another (i.e you can switch on by touching the screen and switch off with the volume down button and vice versa). Or switch on/off by touching the screen only or by making use of the volume up/down buttons only.

    Replace the lib files with this. The new files retain all previously added capabilities.

    Enjoy!
     

    Attached Files:

  14. Johan Schoeman

    Johan Schoeman Expert Licensed User

    See new complete project posted in Post #1. It will timeout if not being able to do a valid scan within 15 seconds from starting the scanner. And raise an event.
     
    Last edited: Jan 9, 2015
  15. Johan Schoeman

    Johan Schoeman Expert Licensed User

    I think it is only fair that I post the amended source code for the library of the projects that I have posted in post #1 of this thread. I have after all inherited the original source code from @icefairy333 in post #1 of his original thread that you can find here. It was a great leaning experience going through this exercise to add additional functionality to his ZXing library. Thank you @icefairy333 for making it available thereby allowing me the opportunity to gain some valuable experience and knowledge. So, I leave this for the B4A community and especially for those that want to add further functionality to the library (although I will be playing around with it a bit more when time permits - holiday has unfortunately now come to an end). I hope that the library as it stands at present is of some value to some of the B4A members.

    For what it might be worth (for newbies like me that want to play around with Java and libraries), I have done all the additions and amendments in Notepad (Windows 2007) and compiled the library with @Erel 's Simple Library Compiler. And it was (for me personally) much easier this way than trying to get my head around Eclipse. You only need to set up a very simple directory structure to compile the source code. The whole lot is in the attached src zipped folder and will compile as is into a library that can be used in B4A projects (jar and xml will be generated). The same library as what I have used in the last project that I have posted in post #1. And I mean, the exact same thing. Will gladly assist anyone (newbies to Java such as me) that want to go through the compiling process with SLC.

    Thank you @Erel for the entertainment that you provide us with - it makes holidays being far to short!

    The java source code of this project is in post #1 of this thread (src.zip)

    Edit: see posts #20 and #22 of this thread for how to compile the library.
     
    Last edited: Jan 11, 2015
    DonManfred, Reids and thedesolatesoul like this.
  16. bluedude

    bluedude Well-Known Member Licensed User

    Hi, i tried to find the cancel event but couldn't find the name.
     
  17. Johan Schoeman

    Johan Schoeman Expert Licensed User

    Misunderstood you. Thought you were looking for cancel event meaning a timeout. Using the "back" button of your device will in any case return back to B4A project and raise an event in B4A. Do you want to do the cancel from a button on the mask while the scanner is active?
     
  18. bluedude

    bluedude Well-Known Member Licensed User

    Mm, one of the old versions had a cancel event generated when the back button was pressed. Sure I can do it in resume.

    Other questions, do you have the settings you use when compiling with SLC? Cannot get the correct result when creating the folder structure.
     
  19. bluedude

    bluedude Well-Known Member Licensed User

    Is there also a way to disable the timeout?
     
  20. Johan Schoeman

    Johan Schoeman Expert Licensed User

    OK - set up your project as follows (for eg):
    Create a directory structure on your c: or d: or whatever drive that looks as follows:

    BlueDudeZxingLib
    src
    ......all the files and directories in the src folder​

    Then copy all the files and directories as is into the src folder (else just drop the complete src folder - once unzipped - into the BlueDudeZxingLib folder without making an additional src folder.

    Then start Simple Library Compiler (SLC)

    1. In the first line of SLC you browse to the BlueDudeZxingLib folder
    2. In the second line you put the name of whatever you want the library to be (this is the name that will appear in you B4A project library list). Put in for eg BlueDudeZxingLib if that is the name that you want it to be
    3. In the -b4aignore field you enter com

    Click on compile and then sit back and relax for a few seconds. The jar and xml will be added to you additional library folder.

    No pics required - it is as simple as this. Give it a try and let me know
     
    Last edited: Jan 9, 2015
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice