【问题标题】:Zxing scan stopsZxing 扫描停止
【发布时间】:2016-03-13 12:02:24
【问题描述】:

我使用 Zxing 扫描二维码和https://github.com/pedant/sweet-alert-dialog 用于一些漂亮的对话框。当我启动应用程序和每次进行扫描时,我都会检查我是否有互联网连接。我的问题是扫描仪在第一次扫描后停止,它显示对话框弹出,我按确定按钮并停止扫描过程,但相机仍在显示。我的代码或逻辑有什么错误吗???

handleResult中没有第二次进入

public class MainActivity extends Activity implements ZXingScannerView.ResultHandler {
    private SweetAlertDialog pDialog;
    private ZXingScannerView mScannerView;

    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        mScannerView = new ZXingScannerView(this);   // Programmatically initialize the scanner view
        setContentView(mScannerView);                // Set the scanner view as the content view
        pDialog = new SweetAlertDialog(this, SweetAlertDialog.SUCCESS_TYPE);

        if (!Utils.isNetworkAvailable(MainActivity.this)) {
            alertBadNetworkConnection("Network connection error", "Please check your internet connection");
        }
    }

    private void alertBadNetworkConnection(String title, String context) {
        pDialog.changeAlertType(SweetAlertDialog.ERROR_TYPE);
        pDialog.setTitleText(title)
                .setContentText(context)
                .setConfirmText("OK")
                .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                    @Override
                    public void onClick(SweetAlertDialog sweetAlertDialog) {
                        pDialog.dismiss();
                        mScannerView.startCamera();
                    }
                })

                .show()
        ;
    }

    private void alertSuccess(String title, String context) {
        pDialog.changeAlertType(SweetAlertDialog.SUCCESS_TYPE);
        pDialog.setTitleText(title)
                .setContentText(context)
                .setConfirmText("OK")
                .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() {
                    @Override
                    public void onClick(SweetAlertDialog sweetAlertDialog) {
                        pDialog.dismiss();
                        mScannerView.startCamera();
                    }
                })
                .show();
    }

    @Override
    public void onResume() {
        super.onResume();
        mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results.
        mScannerView.startCamera();          // Start camera on resume
    }

    @Override
    public void onPause() {
        super.onPause();
        mScannerView.stopCamera();           // Stop camera on pause
    }

    @Override
    public void handleResult(Result result) {

        if (!Utils.isNetworkAvailable(MainActivity.this)) {
            alertBadNetworkConnection("Network connection error", "Please check your internet connection");
        } else {
            alertSuccess("Good job!", result.getText());
        }
    }
}

这是检查互联网连接的方法

public static boolean isNetworkAvailable(Context context) {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }

【问题讨论】:

  • 你有什么解决办法

标签: java android android-camera android-alertdialog zxing


【解决方案1】:

在您的 handleResult() 方法中执行以下操作

    // If you would like to resume scanning, call this method below:
    mScannerView.resumeCameraPreview(this);

例子:

@Override
public void handleResult(Result result) {

    if (!Utils.isNetworkAvailable(MainActivity.this)) {
        alertBadNetworkConnection("Network connection error", "Please check your internet connection");
    } else {
        alertSuccess("Good job!", result.getText());
       // If you would like to resume scanning, call this method below:
       mScannerView.resumeCameraPreview(this);
    }
}

【讨论】: