Android zxing 连续扫描 再次扫描

今天一个朋友问在使用zxing扫描得到结果后,不知道如何再次扫描
先理解一下连续扫描和再次扫描
正常情况下通过扫描得到结果后停止扫描

连续扫描:得到结果后继续扫描,类似超市扫描商品
再次扫描:得到结果后经过确认后再次扫描

两者逻辑处理有很大区别的
默认情况下逻辑

 /**
     * 扫描成功,处理反馈信息
     *
     * @param rawResult
     * @param barcode
     * @param scaleFactor
     */
    public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor) {
        inactivityTimer.onActivity();
        boolean fromLiveScan = barcode != null;
        //这里处理解码完成后的结果,此处将参数回传到Activity处理
        if (fromLiveScan) {
                 //扫描的结果
                 String result  = rawResult.getText();
        }
}

这个时候你会发现得到结果后,无法继续扫描

连续扫描:
调用restartPreviewAndDecode();
但是有缺点就是一个二维码会扫码多次

  public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor) {
        inactivityTimer.onActivity();
        boolean fromLiveScan = barcode != null;
        //这里处理解码完成后的结果,此处将参数回传到Activity处理
        if (fromLiveScan) {
                 //扫描的结果
                 String result  = rawResult.getText();
                  /*
                       do something
                  */
                  if (handler != null) {
                          handler.restartPreviewAndDecode();
                  }
        }
}

再次扫描:

先退出然后重新初始相机

 /**
     * 扫描成功,处理反馈信息
     *
     * @param rawResult
     * @param barcode
     * @param scaleFactor
     */
    public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor) {
        inactivityTimer.onActivity();
        boolean fromLiveScan = barcode != null;
        //这里处理解码完成后的结果,此处将参数回传到Activity处理
        if (fromLiveScan) {
               closeCamera();
               String result = rawResult.getText();
               /*
                    do something
               */
              new AlertDialog.Builder(this)
                    .setMessage("扫描结果"+result+"\n是否再次扫描")
                    .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                           finish();
                            dialog.dismiss();
                        }
                    }).setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    restartCamera();
                    dialog.dismiss();
                }
            }).setCancelable(false)
                    .create().show();
           
        }
}

private void closeCamera(){
       //完全退出
        if (handler != null) {
            handler.quitSynchronously();
            handler = null;
        }
        inactivityTimer.onPause();
        // 关闭设备相机
        cameraManager.closeDriver();
    }

 private void restartCamera(){
        viewfinderView.setVisibility(View.VISIBLE);
        SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
        SurfaceHolder surfaceHolder = surfaceView.getHolder();
        initCamera(surfaceHolder);
        // 恢复活动监控器
        inactivityTimer.onResume();
    }

各有各的用途 根据洗好自己选择

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,888评论 25 709
  • 摘要 最近,在公司项目上需要加入“二维码扫描”的功能(Android端),笔者在网上查阅了一些资料,实现了这个功能...
    梦想编织者灬小楠阅读 41,407评论 76 157
  • ZXing应用详解 现在的项目中需要加上二维码扫描,虽然使用了第三方库,也还好用,但是对这部分只是还是比较感兴趣,...
    MycroftWong阅读 52,855评论 11 45
  • Mcool (现中文名:天籁,曾用中文名:飞行音乐、随风飞音)是个有独特魅力的音乐播放器,即使是在众多琳琅满目的音...
    不知语冰阅读 11,112评论 5 7
  • 没有月亮,暮雨更加深了夜的黑。灯笼散发着昏黄的光芒,几点小虫迎着光盘旋,只见光点冲进冲出。雨暗暗地下着,这样的夜,...
    孤独一刀阅读 3,865评论 62 37