Ich verwende ZXing-android-Embedded (https://github.com/journeyapps/zxing-android-embedded) QR-Codes zu scannen. Ich habe die Bibliothek von Github importiert. Wenn die App startet, scannt die Kamera den Code wiederholt, solange die Kamera auf einem Barcode platziert ist. Ich möchte den Scanvorgang stoppen (aber nicht die Kameravorschau). Sobald der Barcode erkannt wurde und ein Dialogfeld mit der Schaltfläche "Bestätigen", "Abbrechen" und einem Eingabefeld angezeigt wird. Wenn der Benutzer die Taste "Bestätigen" oder "Abbrechen" drückt, sollte er erneut mit dem Scannen beginnen.So stoppen Sie kontinuierliche Scannen von zxing-Android-Embedded in Android
Ich habe barcodeView.pause();
am Anfang der decode() -Methode aufgerufen, die die Kameravorschau pausiert. Auch hinzugefügt barcodeView.resume();
innerhalb onClick Methode von "dialogConfirmClick" und "dialogCancelClick". Aber die Methode barcodeView.pause();
unterbricht sowohl das Scannen als auch die Kameravorschau.
Hier ist meine Klassen-
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);
}
}