重新启动活动后,Zxing扫描器无法启动

时间:2019-05-13 06:08:59

标签: android zxing barcode-scanner application-restart

我正在编写一个应用程序,以便用户在扫描QR码时会收到信息。

我的问题是当我想再次使用扫描仪时。活动首次启动没有问题,效果很好。当我离开活动并返回到该活动时,它不会扫描,它们会变成白色。

我认为问题出在通过onRestartonStart方法重新启动活动的过程中……我可能是错的。

这是扫描仪活动代码:

public class EscanerQrActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {

    public String code;
    private ZXingScannerView zXingScannerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_escaner_qr);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
        zXingScannerView = (ZXingScannerView) findViewById(R.id.scanner);
        zXingScannerView.setResultHandler(this);
        zXingScannerView.startCamera();
    }

    @Override
    public void handleResult(Result result) {
        code = result.getText();
        saveLocal(readQRCode(code, 0)); //Guarda referencia QR del Local
        saveID(readQRCode(code, 1)); //Guarda referencia QR del ID de la mesa
        //Vibrar
        Vibrator vibrator = (Vibrator) getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(200);
        startActivity(new Intent(EscanerQrActivity.this, MainActivity.class));
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

    public String readQRCode(String s, int i){//i=0 Local ; i=1 IdMesa
        String [] parts = s.split("=="); //obtiene las partes
        String [] p = parts[0].split("//"); //limpia la primera parte
        parts[0] = p[1];
        return parts[i];
    }
    public String verificarQRCode(String s, int i){//i=0 Enlace BD
        String [] parts = s.split("Locales");
        return parts[i];
    }
    private void saveID(String qr){
        try { OutputStreamWriter fout= new OutputStreamWriter(openFileOutput("QR.IdMV", Context.MODE_PRIVATE));
            fout.write(qr);
            fout.close();
        } catch (Exception ex) {
            Log.e("Ficheros", "Error al escribir fichero a memoria interna");
        }
    }
    private void saveLocal(String qr){
        try { OutputStreamWriter fout= new OutputStreamWriter(openFileOutput("QR.Local", Context.MODE_PRIVATE));
            fout.write(qr);
            fout.close();
        } catch (Exception ex) {
            Log.e("Ficheros", "Error al escribir fichero a memoria interna");
        }
    }

    @Override
    protected void onRestart() {
        super.onRestart();
    }

    @Override
    protected void onStart() {
        super.onStart();
    }
}

我将不胜感激。

0 个答案:

没有答案