安卓Zxing 扫码如何连续扫码

public class KuaidiyuanQrcodeActivity extends Activity implements QRCodeView.Delegate{
        ZXingView mQR;
        LinearLayout kuadiyuanqrcode_back;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_kuaidiyuan_qrcode);
            //设置结果处理
            mQR = findViewById(R.id.zx_view);
            mQR.setDelegate(this);//(如果使用的新版本的依赖,使用这个)
            //开始读取二维码
            mQR.startSpot();
            init_view();
            init_event();
        }
    private void init_view() {
        kuadiyuanqrcode_back=findViewById(R.id.kuadiyuanqrcode_back);
    }
    private void init_event() {
        kuadiyuanqrcode_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }

    /**
         * 扫描二维码成功
         * @param result 识别的结果
         */
        @Override
        public void onScanQRCodeSuccess(String result) {
            String code_text=result;
         
    
        }

        /**
         * 打开相机出错
         */
        @Override
        public void onScanQRCodeOpenCameraError() {
            Toast.makeText(KuaidiyuanQrcodeActivity.this, "打开相机出错!请检查是否开启权限!", Toast.LENGTH_SHORT).show();
        }

    }



}
阅读 4.6k
1 个回答

在CaptureActivity类中找到以下方法:

/**

 * Handler scan result
 * 
 * @param result
 * @param barcode
 */
public void handleDecode(Result result, Bitmap barcode)
{
    inactivityTimer.onActivity();
    playBeepSoundAndVibrate();

    String resultString = result.getText();

    doResult(resultString);
}

/**
 * 增加的部分:对扫描返回的结果进行处理
 */
private void doResult(String result)
{
    if (result.equals(""))
    {
        ToastUtil.showToastByThread(getApplicationContext(),
                "二維碼掃描失敗,請手動輸入!");

    } else
    {
        mHandler.postDelayed(runnable, 1000);
    }

}

/**
 * 增加的部分:实现多次重复扫描,否则本界面打开一次,只能聚焦一次,扫描一次。增加这一部分之后就能连续聚焦,连续扫描
 */
Handler mHandler = new Handler();
Runnable runnable = new Runnable()
{

    @Override
    public void run()
    {
        if (handler != null)
        {
            try
            {
                mHandler.postDelayed(runnable, 1000);

                handler.restartPreviewAndDecode(); // 实现多次扫描

            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题