2

I am scanning QR CODE but the problem is ReceiveDetections method is calling multiple times even after a successful scan.How can I prevent calling the api multiple times after a successful call.

here is the code snippet

 public void ReceiveDetections(Detections detections)
        {
            SparseArray qrcodes = detections.DetectedItems;

            if (qrcodes.Size() != 0)
            {
                txtscankanbancloseResult.Post(async () =>
                {
                    Vibrator vibrator = (Vibrator)GetSystemService(Context.VibratorService);
                    vibrator.Vibrate(1000);

                    txtscankanbancloseResult.Text = ((Barcode)qrcodes.ValueAt(0)).RawValue;

                    try
                    {
                        var client = new HttpClient();
                        var uri = new Uri(string.Format(AppStatics.clsStatic.url + "//Kanban/SaveKanbanStatus"));

                        List<string> lstskanban = new List<string>();
                        String myDate = DateTime.Now.ToString("dd-MMM-yyyy");
                        string adateddate = DateTime.Now.ToString("dd-MMM-yyyy hh:mm:ss");

                        JsonScankanbanclose objjscan = new JsonScankanbanclose();

                        lstskanban.Add(txtscankanbancloseResult.Text);

                        objjscan.UpdateBy = SingletonSession.Instance().getUsername();
                        objjscan.KANBANNOList = lstskanban;
                        objjscan.IsKANBANClosed = true;

                        string jsonData = JsonConvert.SerializeObject(objjscan);

                        var content = new StringContent(jsonData, Encoding.UTF8, "application/json");

                        HttpResponseMessage response = await client.PostAsync(uri, content);

                        var result = await response.Content.ReadAsStringAsync();

                        if (response.ReasonPhrase == "OK")
                        {
                            JArray scanresult = JArray.Parse(result);

                            Scanlist objscan = new Scanlist();

                            if (ScanSucessfull.Count == 0)
                            {
                                objscan.KanbanID = "Kanban NO";
                                objscan.KanbanQty = "Kanban Qty";

                                ScanSucessfull.Add(objscan);

                                objscan = new Scanlist();
                            }


                            // Scanlist item = ScanSucessfull.Find(c => c.KanbanID == scanresult[0]["KANBANID"].ToString());

                            //int itemPosition = ScanSucessfull.BinarySearch(scanresult[0]["KANBANID"].ToString());

                            //if (itemPosition.cou=="")
                            //{
                            objscan.KanbanID = scanresult[0]["KANBANNumber"].ToString();
                            objscan.KanbanQty = scanresult[0]["Qty"].ToString();
                            ScanSucessfull.Add(objscan);
                            //}

                            var adapter = new CustomAdapterScan(this, ScanSucessfull);

                            lstviewscankanbanclose.SetAdapter(adapter);

                            lstviewscankanbanclose.Clickable = false;
                            //lstview.Enabled = false;
                            lstviewscankanbanclose.ItemSelected += null;

                            mPlayer = Android.Media.MediaPlayer.Create(this, Resource.Raw.successful);
                            currentSong = Resource.Raw.successful;
                            mPlayer.SeekTo(1);
                            mPlayer.Start();
                            //Toast.MakeText(this, , ToastLength.Short).Show();
                            Helper.ShowToastMessage(this, Color.DarkGreen, "Data Save Sucessfully..", ToastLength.Short);

                            _kanbancount++;

                            txtscankanbanclosekanbancount.Text = "Kanban Count:" + " " + _kanbancount;

                            txtscankanbanclosekanbancount.Visibility = ViewStates.Visible;

                        }
                        else
                        {
                            string[] result1 = result.Split(':');

                            string[] result2 = result1[1].Split('"');

                            string[] result3 = result2[1].Split('"');

                            mPlayer = Android.Media.MediaPlayer.Create(this, Resource.Raw.fail);
                            // mPlayer.SeekTo(2);
                            currentSong = Resource.Raw.fail;
                            mPlayer.Start();

                            //Toast.MakeText(this, result3[0].ToString(), ToastLength.Short).Show();
                            Helper.ShowToastMessage(this, Color.DarkRed, result3[0].ToString(), ToastLength.Short);

                        }
                        // dialog.Hide();
                        cameraSource.Start(surfaceView.Holder);
                        //txtResult.Text = "";
                    }
                    catch (System.Exception ex)
                    {
                        Helper.ShowToastMessage(this, Color.DarkRed, ex.Message, ToastLength.Short);
                        //Toast.MakeText(this, ex.Message.ToString(), ToastLength.Short).Show();
                        // txtResult.Text = "";
                        txtscankanbancloseResult.Visibility = ViewStates.Invisible;
                        //cameraSource.Start(surfaceView.Holder);
                    }

                });


                using (var h = new Handler(Looper.MainLooper))
                    h.Post(() =>
                    {
                        cameraSource.Stop();
                        // Toast.MakeText(this, "This Kanban Already Scanned....", ToastLength.Short).Show();
                    });


            }
        }

Here is the code where I crate and open the camera source to scan the QR code

 private void btnkanbanscan_Click(object sender, EventArgs e)
        {
            try
            {
                #region validation

                if (spnSiteID.SelectedItemPosition < 0)
                {
                    throw new Exception("Please Select Site...");
                }
                if (spnLocation.SelectedItemPosition < 0)
                {
                    throw new Exception("Please Select Location..");
                }
                if (spnInspactionType.SelectedItemPosition < 0)
                {
                    throw new Exception("Please Select Inspection Type..");
                }
                #endregion


                LayoutInflater layoutInflater = LayoutInflater.From(this);
                View scanview = LayoutInflater.Inflate(Resource.Layout.scan_popup, null);
                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
                alertDialogBuilder.SetView(scanview);

                surfaceView = scanview.FindViewById<SurfaceView>(Resource.Id.spvscan);
                dialog = alertDialogBuilder.Create();
                dialog.SetCanceledOnTouchOutside(false);

                dialog.Show();

                barcodeDetector = new BarcodeDetector.Builder(this)
                    .SetBarcodeFormats(BarcodeFormat.Code128 | BarcodeFormat.QrCode)
                    .Build();

                cameraSource = new CameraSource.Builder(this, barcodeDetector)
                    .SetRequestedPreviewSize(480, 480)
                    .SetAutoFocusEnabled(true)
                    .Build();

                surfaceView.Holder.AddCallback(this);
                barcodeDetector.SetProcessor(this);


                surfaceView.Visibility = ViewStates.Visible;

                _definemethod = "KANBAN";

            }
            catch (Exception ex)
            {
                Helper.ShowToastMessage(this, Color.DarkRed, ex.Message, ToastLength.Short);

                //Toast.MakeText(this, ex.Message.ToString(), ToastLength.Short).Show();
            }
        }

NCTB: I noticed that after opening the dialog to scan the QR CODE the ReceiveDetections method get called frequently and the scanned value comes in detections parameter .which is normal and it supposed to do so.But the problem is after a successful scan it should not call anymore.

rykamol
  • 1,097
  • 1
  • 10
  • 19
  • if the problem is that ReceiveDetections is being called multiple times, it is unlikely the problem is in ReceiveDetections itself. Where is the code that actually performs the scan? – Jason Aug 22 '20 at 12:19
  • Thanks @jason.I've added some extra information.please have a look. Any kind of help is highly appropriated. – rykamol Aug 22 '20 at 12:40
  • https://stackoverflow.com/questions/50140928/how-to-stop-barcodedetector – Jason Aug 22 '20 at 12:48

0 Answers0