/** * Update the position/characteristics of the face within the overlay. * 바코드 Result부분 */ public override void OnUpdate(Detector.Detections detections, Java.Lang.Object item) { //2개이상 바코드를 스캔해서 경고창이 발생할 경우 화면이 Freeze된다. //if (detections.DetectedItems.Size() != 1) //{ // return; //} Rect rect = ((BarcodeScannerActivity)_activity).mPreview.mSurfaceView._clipBounds; float left; float right; float top; float bottom; //IList<Point> point = (item as Barcode).CornerPoints; if (!Settings.ScanMode.Equals("FULL")) { left = (rect.Left * (float)((BarcodeScannerActivity)_activity).mCameraSource.PreviewSize.Height) / (float)((BarcodeScannerActivity)_activity).mPreview.mSurfaceView.scaleNominatorX; right = (rect.Right * (float)((BarcodeScannerActivity)_activity).mCameraSource.PreviewSize.Height) / (float)((BarcodeScannerActivity)_activity).mPreview.mSurfaceView.scaleNominatorX; top = (rect.Top * (float)((BarcodeScannerActivity)_activity).mCameraSource.PreviewSize.Width) / (float)((BarcodeScannerActivity)_activity).mPreview.mSurfaceView.scaleNominatorY; bottom = (rect.Bottom * (float)((BarcodeScannerActivity)_activity).mCameraSource.PreviewSize.Width) / (float)((BarcodeScannerActivity)_activity).mPreview.mSurfaceView.scaleNominatorY; //관심영여과 스캔한 바코드가 교차영역이 없으면 skip한다. //카메라와 PreView 좌표가 넘어온다. Layout 크기와 Preview 카메라 크기가 다르면 아래 코드는 작동하지 않는다. //if (!(item as Barcode).BoundingBox.Intersect(((BarcodeScannerActivity)_activity).mPreview.mSurfaceView.GetAreaOfInterestCamera())) if (!(item as Barcode).BoundingBox.Intersect(new Rect((int)left, (int)top, (int)right, (int)bottom))) { return; } } //화면 표시 mOverlay.Add(mBarcodeGraphic); //1. 단일/연속 구분 //연속 스캔 if (((BarcodeScannerActivity)_activity).IsContinue) { //고정(스캔 해야할 대상이 정해져 있음) if (((BarcodeScannerActivity)_activity).IsFixed) { if (((BarcodeScannerActivity)_activity).AllScanBarcode.Contains(item.JavaCast <Barcode>().DisplayValue)) { //1. 저장 했는지? if (((BarcodeScannerActivity)_activity).SaveCompletedBarcode.Contains(item.JavaCast <Barcode>().DisplayValue)) { //CameraStop(); mBarcodeGraphic.UpdateBarcode(item.JavaCast <Barcode>(), "저장 완료", 3); //long[] pattern = { 0, 100, 1000 }; Warning(); //Task.Run(() => //{ // ((BarcodeScannerActivity)_activity).StartCameraSource(); //}); } //2. Scan완료 했는지? else if (((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Contains(item.JavaCast <Barcode>().DisplayValue)) { //CameraStop(); mBarcodeGraphic.UpdateBarcode(item.JavaCast <Barcode>(), "스캔 완료", 1); //long[] pattern = { 0, 100, 1000 }; Warning(); //Task.Run(() => //{ // ((BarcodeScannerActivity)_activity).StartCameraSource(); //}); } else { //------------ //정상처리 작업 //------------ mBarcodeGraphic.UpdateBarcode(item.JavaCast <Barcode>(), string.Empty, 0); OnScanCompleted?.Invoke(item.JavaCast <Barcode>()); ((BarcodeScannerActivity)_activity)._playerBeep.Start(); if (((BarcodeScannerActivity)_activity).vibrator != null) { try { ((BarcodeScannerActivity)_activity).vibrator.Vibrate(300); } catch (Exception e) { Console.WriteLine(e.Message); } } if (!((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Contains(item.JavaCast <Barcode>().DisplayValue)) { ((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Add(item.JavaCast <Barcode>().DisplayValue); } if ( ((BarcodeScannerActivity)_activity).AllScanBarcode.Count == ((BarcodeScannerActivity)_activity).SaveCompletedBarcode.Count + ((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Count ) { CameraStop(); Barcode barcode = new Barcode { DisplayValue = "EXIT" }; OnScanCompleted?.Invoke(barcode); //Task.Delay(200).Wait(); Thread.Sleep(300); ((BarcodeScannerActivity)_activity).Finish(); //Finsh해야 스캔 화면 종료됨. } else { //연속스캔 사이의 간격 지정 //Task.Delay(1000).Wait(); Thread.Sleep(1000); } } } else { mBarcodeGraphic.UpdateBarcode(item.JavaCast <Barcode>(), "스캔 대상X", 2); Warning(); } } //비고정(스캔 대상이 없음) else { //현재로서는 biz로직이 없음 //mBarcodeGraphic.UpdateBarcode(item.JavaCast<Barcode>(), 0, ((BarcodeScannerActivity)_activity).rowPosition++); //OnScanCompleted(item.JavaCast<Barcode>()); //if (!((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Contains(item.JavaCast<Barcode>().DisplayValue)) //{ // ((BarcodeScannerActivity)_activity).ScanCompletedBarcode.Add(item.JavaCast<Barcode>().DisplayValue); //} //Task.Delay(700).Wait(); } } //단일 스캔 else { CameraStop(); mBarcodeGraphic.UpdateBarcode(item.JavaCast <Barcode>(), string.Empty, 1); OnScanCompleted?.Invoke(item.JavaCast <Barcode>()); ((BarcodeScannerActivity)_activity)._playerBeep.Start(); if (((BarcodeScannerActivity)_activity).vibrator != null) { try { #pragma warning disable CS0618 // Type or member is obsolete ((BarcodeScannerActivity)_activity).vibrator.Vibrate(300); #pragma warning restore CS0618 // Type or member is obsolete } catch (Exception e) { Console.WriteLine(e.Message); } } //Task.Delay(200).Wait(); Thread.Sleep(300); ((BarcodeScannerActivity)_activity).Finish(); //Finsh해야 스캔 화면 종료됨. } if (mBarcodeGraphic != null) { mOverlay.Remove(mBarcodeGraphic); } }