Perché onActivityResult innescato prima attività inizia ancora?
-
29-09-2019 - |
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?
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.