Domanda

Ho un app che ha bisogno di un codice a barre per ottenere un codice prima di poter continuare. Io uso questo codice per avviare l'attività di scansione:

finish = (Button) findViewById(R.id.finishButton);
        finish.setOnClickListener(new OnClickListener() {
            public void onClick(View viewParam) {

                /*Prompt the user to scan the barcode */
                new AlertDialog.Builder(Visit.this)
                .setMessage("Please Scan the clients barcode to complete the visit")
                .setPositiveButton("Scan Barcode", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //Start the scan application
                        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                        startActivityForResult(intent, 0);
                    }
                })

                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //Execute some method call
                        Toast.makeText(Visit.this, "Scan declined...", Toast.LENGTH_SHORT).show();
                    }
                })
                .show();
                /* End of Scan prompt */
            }
        });

Il codice di cui sopra imposta un ascoltatore su un pulsante etichettato finished. Quando il pulsante viene premuto, viene visualizzato un messaggio che chiede all'utente di eseguire la scansione di un codice a barre o annullare.

Facendo clic sul scansione del codice a barre pulsante si avvia una nuova attività che inizia la scansione.

Ho il seguente codice impostato per leggere il risultato della scansione al ritorno dalla scansione:

/* Return from scanning barcode */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
;
      if (resultCode == Activity.RESULT_OK && requestCode == 0) {
        Bundle extras = data.getExtras();
        String result = extras.getString("SCAN_RESULT");
      }
      Toast.makeText(Visit.this, "request code: "+requestCode+" result code = "+resultCode+ "\nRESULT_OK: "+Activity.RESULT_OK, Toast.LENGTH_SHORT).show();
    }

Quali molto semplice (per ora) in uscita il risultato di attività in un messaggio brindisi.

Il problema che sto avendo è che il metodo onActivityResult viene attivato non appena si preme il pulsante di codici a barre di scansione.

Il processo di scansione funziona bene come posso vedere i risultati della scansione nel logcat., Ma perché viene attivato troppo presto il metodo onActivityResult non ottiene mai il risultato della scansione ed il codice risultato è sempre -1

Mi sto perdendo un passo qui? C'è qualche modo di arrivare a onActivityResult di aspettare fino a quando l'attività finiture reali?

È stato utile?

Soluzione

Sembra che il barcode scanner che sto usando ha un particolare bug in esso per le interfacce scheda con singola istanza nel manifesto che è come l'ho avuto.

Rimozione del singolo stipula istanza mi ha permesso di fare un hack su di esso questo è perfettamente funzionante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top