2015-08-01 17 views
5

Tôi đang sử dụng Zxing-android-embedded (https://github.com/journeyapps/zxing-android-embedded) để quét mã QR. Tôi đã nhập thư viện từ github. Khi ứng dụng bắt đầu, máy ảnh sẽ quét mã liên tục miễn là máy ảnh được đặt trên mã vạch. Tôi muốn dừng quét (nhưng không xem trước máy ảnh) khi mã vạch được phát hiện và hiển thị hộp thoại có nút "Xác nhận", nút "Hủy" và hộp nhập. Khi người dùng nhấn nút "Xác nhận" hoặc "Hủy", nó sẽ bắt đầu quét lại.Cách dừng quét liên tục bằng zxing-android-embedded trong Android

Tôi đã gọi số barcodeView.pause(); ở đầu phương thức giải mã() tạm dừng xem trước máy ảnh. Ngoài ra, thêm barcodeView.resume(); bên trong phương thức onClick của "dialogConfirmClick" và "dialogCancelClick". Nhưng phương pháp barcodeView.pause(); tạm dừng quét cũng như xem trước máy ảnh.

Đây là class- tôi

public class MyScanActivity extends Activity { 
    private static final String TAG = MyScanActivity.class.getSimpleName(); 

    private CompoundBarcodeView barcodeView; 
    private BeepManager beepManager; 
    private DialogInterface.OnClickListener dialogCanselClick; 
    private AlertDialog dialog; 

    private BarcodeCallback callback = new BarcodeCallback() { 
     @Override 
     public void barcodeResult(BarcodeResult result) { 
      if (result.getText() != null) { 
       handleDecode(result); 
      } 
     } 

     @Override 
     public void possibleResultPoints(List<ResultPoint> resultPoints) { 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Window window = getWindow(); 
     window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     setContentView(R.layout.continuous_scan); 
     barcodeView = (CompoundBarcodeView) findViewById(R.id.barcode_scanner); 
     barcodeView.decodeContinuous(callback); 
     beepManager = new BeepManager(this); 
     dialogCancelClick = new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       barcodeView.resume();//Resume scanning 
       dialog.dismiss(); 
      } 
     }; 
    } 

    public void handleDecode(BarcodeResult rawResult) { 
     barcodeView.pause();//Pause preview 
     String result = rawResult.getText(); 

     beepManager.playBeepSoundAndVibrate(); 

     DialogInterface.OnClickListener dialogOkClick = new DialogInterface.OnClickListener() { // OK 
      // button 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 

       if (writeNote) { 
        EditText txtNote = (EditText) promptsView.findViewById(R.id.txt_dialog_note); 
        //code to merge value of txtNote with result 
       } 

       dialog.dismiss(); 
       barcodeView.resume();//Resume scanning after pressing confirm button 
       Toast.makeText(MyScanActivity.this, R.string.dialog_save_qr_alert, Toast.LENGTH_SHORT).show(); 
      } 
     }; 

     AlertDialog dialog = DialogHelper.CreateDialog(this, DialogHelper.SAVE_QR_CODE, result, dialogOkClick, dialogCancelClick, promptsView); 
     dialog.show(); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     barcodeView.resume(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 

     barcodeView.pause(); 
    } 

    public void pause(View view) { 
     barcodeView.pause(); 
    } 

    public void resume(View view) { 
     barcodeView.resume(); 
    } 

    public void triggerScan(View view) { 
     barcodeView.decodeSingle(callback); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     return barcodeView.onKeyDown(keyCode, event) || super.onKeyDown(keyCode, event); 
    } 
} 

Trả lời

6

tôi đã có giải pháp. Tôi đăng bài này để điều này có thể giúp những người khác có thể có cùng một nghi ngờ.

Thay vì sử dụng barcodeView.decodeContinuous(callback); bên trong onCreate sử dụng phương pháp barcodeView.decodeSingle(callback);. Sau khi tìm thấy mã QR, mã sẽ ngừng quét. Gọi số barcodeView.decodeSingle(callback); bên trong Xác nhậnHủy bỏ nút để kích hoạt quét lại.

Các vấn đề liên quan