From 47f9e456f56f3c6b9ccf85742d5fa892b66134de Mon Sep 17 00:00:00 2001 From: si27645 <33075025+si27645@users.noreply.github.com> Date: Thu, 21 Dec 2017 03:28:08 +0000 Subject: [PATCH] A fix to solve an issue while reading standard Barcodes like EAN13 //tired of getting partial reads. Make a redundancy read using the base plugin, do the same validation using Outsystems would be too slow... @NSI --- android/ZBarScannerActivity.java | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/android/ZBarScannerActivity.java b/android/ZBarScannerActivity.java index 9f23fa2..b0d7e8a 100644 --- a/android/ZBarScannerActivity.java +++ b/android/ZBarScannerActivity.java @@ -408,18 +408,46 @@ public void onPreviewFrame(byte[] data, Camera camera) { SymbolSet syms = scanner.getResults(); for (Symbol sym : syms) { qrValue = sym.getData(); - + if(sym.getType()!=Symbol.QRCODE) { // we don't need this in QR codes + BarCodes.add(qrValue); + Redundancy_Check(); + break; + }else + { // Return 1st found QR code value to the calling Activity. Intent result = new Intent (); result.putExtra(EXTRA_QRVALUE, qrValue); setResult(Activity.RESULT_OK, result); finish(); + } } } } }; - + + private ArrayList BarCodes = new ArrayList(); + private int numOfTries=0; + private void Redundancy_Check(){ + // tired of getting partial reads + if(BarCodes.size()>2 ) + { + numOfTries++; + if(BarCodes.get(BarCodes.size()-1).equals(BarCodes.get(BarCodes.size()-2)) && BarCodes.get(BarCodes.size()-2).equals(BarCodes.get(BarCodes.size()-3) )) { + Intent result = new Intent(); + result.putExtra(EXTRA_QRVALUE, BarCodes.get(BarCodes.size()-1)); + setResult(Activity.RESULT_OK, result); + finish(); + } + if(numOfTries>10) + { + Intent result = new Intent(); + result.putExtra(EXTRA_QRVALUE, "max number of tries reached"); + setResult(Activity.RESULT_CANCELED,result); + finish(); + } + } + } // Misc ------------------------------------------------------------ // finish() due to error