【问题标题】:Camera gets stuck after scanning qr code with zxing用zxing扫描二维码后相机卡住了
【发布时间】:2018-12-15 19:09:09
【问题描述】:

我使用结果处理程序实现了 QR 码扫描器。它扫描得很好。但是,第一次扫描完成后,相机卡住了。如何实现二维码扫码,让摄像头继续扫描不卡顿?

我的代码如下所示:

public class SimpleScannerFragment extends Fragment implements ZXingScannerView.ResultHandler {


private ZXingScannerView mScannerView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.scannerview, null);
    mScannerView = (ZXingScannerView) v.findViewById(R.id.scanner_view);
    return v;
}

@Override
public void onResume() {

    super.onResume();
    mScannerView.startCamera();
    mScannerView.setResultHandler(this);

}


@Override
public void handleResult(Result rawResult) {
    ParsedResult parserdResult = ResultParser.parseResult(rawResult);


     Toast.makeText(getActivity(), "Contents = " + rawResult.getText() + ", Format = " + rawResult.getBarcodeFormat().toString(), Toast.LENGTH_SHORT).show();
   }

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

   }
}

【问题讨论】:

  • 你没有显示任何代码或任何东西。没有人能仅仅根据这个描述说出你做错了什么。
  • 请发布您的代码。
  • 我使用片段来实现结果处理程序。这里我使用 onPause() 和 onResume() 来启动和停止相机。最后我在活动中静态添加片段
  • 你必须贴出你如何处理条码Result的代码?
  • 试试 mScannerView.startCamera();处理完结果中的结果后

标签: android qr-code zxing


【解决方案1】:

根据手册(https://github.com/dm77/barcodescanner) 只需在处理程序中恢复您的相机:

  @Override
  public void handleResult(Result rawResult) {
     ParsedResult parserdResult =   ResultParser.parseResult(rawResult);
     Toast.makeText(getActivity(), "Contents = " + rawResult.getText() + ", Format = " + rawResult.getBarcodeFormat().toString(), Toast.LENGTH_SHORT).show();
     mScannerView.resumeCameraPreview(this);
}

【讨论】:

  • 即使我打电话给resumeCameraPreview(),相机视图也会卡住。即使我打电话给stopCamera(),也没有任何反应。请帮忙
【解决方案2】:

@viper,最适合我的方法。

在 onPostExecute 中

再次启动相机并恢复相机预览。

如果在 handleResult 或 onPostExecute 中显示对话框,Dmitri 的回答可能效果不佳。

   if (scannerView != null){
        scannerView.startCamera();
        scannerView.setAutoFocus(true); //not necessary
        scannerView.resumeCameraPreview(ScanActivity.this);
    }

这会启动相机并刷新它

【讨论】:

    【解决方案3】:

    你必须在暂停相机后恢复相机

    测试这段代码

    public class SimpleScannerFragment extends Fragment implements ZXingScannerView.ResultHandler {
    
         private ZXingScannerView mScannerView;.
    
         @Override
         public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
             View v = inflater.inflate(R.layout.scannerview, null);
             mScannerView = (ZXingScannerView) v.findViewById(R.id.scanner_view);
             return v;
         }
    
         @Override
         public void onStart() {
             super.onStart();
             mScannerView.startCamera();
             mScannerView.setResultHandler(this);    
         }
    
    
         @Override
         public void handleResult(Result rawResult) {
             ParsedResult parserdResult = ResultParser.parseResult(rawResult);
             Toast.makeText(getActivity(), "Contents = " + rawResult.getText() + ", Format = " + rawResult.getBarcodeFormat().toString(), Toast.LENGTH_SHORT).show();
             mScannerView.resumeCameraPreview(this);
         }
    
         @Override
         public void onStop() {
             mScannerView.stopCamera();
             super.onStop();    
         }
    }
    

    【讨论】:

      【解决方案4】:
      resumeCameraPreview(resultHandler: ZXingScannerView.ResultHandler)
      startCamera()
      

      2行代码将使扫描仪启动相机并再次恢复,然后在扫描后连续扫描

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-05
        相关资源
        最近更新 更多