【问题标题】:Android Zxing Barcode Scanner is not scanning correctlyAndroid Zxing 条码扫描仪无法正确扫描
【发布时间】:2016-03-29 10:37:39
【问题描述】:

在我的Android application 中,我拥有Barcode 扫描功能。对于此功能,我使用 Android https://github.com/dm77/barcodescanner 库来扫描 Barcodes。它工作得很好,但是如果我在我的项目中反复扫描,有时它会返回条形码的wrong value(not the actual value)。我想知道它为什么会发生以及如何解决这个问题。我已经用谷歌搜索了,但不幸的是我没有找到任何更好的解决方案。请任何人指导我解决问题。

注意:我使用的是最新版本 1.8.4

SimpleScannerActivity.java

import com.google.zxing.Result;

import me.dm7.barcodescanner.core.IViewFinder;
import me.dm7.barcodescanner.core.ViewFinderView;
import me.dm7.barcodescanner.zxing.ZXingScannerView;

    public class SimpleScannerActivity extends BaseScannerActivity implements ZXingScannerView.ResultHandler {
        private ZXingScannerView mScannerView;

        LoadingFlowScreen loadingFlowScreen;
        NextScanScreen nextScanScreen;

        String shipmentin,locationin;


        @Override
        public void onCreate(Bundle state) {
            super.onCreate(state);
            setContentView(R.layout.activity_simple_scanner);
            setupToolbar();

            loadingFlowScreen = new LoadingFlowScreen();
            nextScanScreen = new NextScanScreen();



            ViewGroup contentFrame = (ViewGroup) findViewById(R.id.content_frame);
            mScannerView = new ZXingScannerView(this) {
                @Override
                protected IViewFinder createViewFinderView(Context context) {
                    return new CustomViewFinderView(context);
                }
            };
            contentFrame.addView(mScannerView);
        }

        @Override
        public void onResume() {
            super.onResume();
            mScannerView.setResultHandler(this);
            mScannerView.startCamera();
        }

        @Override
        public void onPause() {
            super.onPause();
            mScannerView.stopCamera();
        }

        @Override
        public void handleResult(Result rawResult) {


            Intent in = new Intent(SimpleScannerActivity.this, NextScreen.class);//forwaring to another activity once scanned the barcode
            in.putExtra("scannedText",rawResult.getText());//storing the value in prefernce
            startActivity(in);
            finish();            

          mScannerView.resumeCameraPreview(SimpleScannerActivity.this);

        }

        private static class CustomViewFinderView extends ViewFinderView {
            public static final String TRADE_MARK_TEXT = "";
            public static final int TRADE_MARK_TEXT_SIZE_SP = 40;
            public final Paint PAINT = new Paint();

            public CustomViewFinderView(Context context) {
                super(context);
                init();
            }

            public CustomViewFinderView(Context context, AttributeSet attrs) {
                super(context, attrs);
                init();
            }

            private void init() {
                PAINT.setColor(Color.WHITE);
                PAINT.setAntiAlias(true);
                float textPixelSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
                        TRADE_MARK_TEXT_SIZE_SP, getResources().getDisplayMetrics());
                PAINT.setTextSize(textPixelSize);
            }

            @Override
            public void onDraw(Canvas canvas) {
                super.onDraw(canvas);
                drawTradeMark(canvas);
            }

            private void drawTradeMark(Canvas canvas) {
                Rect framingRect = getFramingRect();
                float tradeMarkTop;
                float tradeMarkLeft;
                if (framingRect != null) {
                    tradeMarkTop = framingRect.bottom + PAINT.getTextSize() + 10;
                    tradeMarkLeft = framingRect.left;
                } else {
                    tradeMarkTop = 10;
                    tradeMarkLeft = canvas.getHeight() - PAINT.getTextSize() - 10;
                }
                canvas.drawText(TRADE_MARK_TEXT, tradeMarkLeft, tradeMarkTop, PAINT);
            }
        }
    }

BaseScannerActivity.java

public class BaseScannerActivity extends AppCompatActivity {
    public void setupToolbar() {
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        final ActionBar ab = getSupportActionBar();
        if(ab != null) {
            ab.setDisplayHomeAsUpEnabled(true);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            // Respond to the action bar's Up/Home button
            case android.R.id.home:
                finish();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

【问题讨论】:

    标签: android barcode zxing barcode-scanner


    【解决方案1】:

    我建议你使用 Zbar(来自同一个 repo)。 我们在使用 Zxing 时遇到了一些性能问题,不得不改用 Zbar。 在生产中使用大约 2 年 - 没有问题。

    【讨论】:

    • 我会关注Zbar,但我已经用Zxing完成了所有项目。有没有办法解决Zxing中的问题。
    • 谢谢 localhost,我会的。
    • @localhost .. 我可以将框扫描区域的高度更改为小于默认值吗?
    猜你喜欢
    • 2020-12-03
    • 2013-07-09
    • 1970-01-01
    • 2012-05-21
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多