J'ai une application qui a besoin de scanner un code à barres pour obtenir un code avant de pouvoir continuer.Android onActivityResult déclenché avant même que l'activité commence!
J'utiliser ce code pour commencer l'activité de balayage:
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 */
}
});
Ce que le code ci-dessus ne se définit un écouteur sur un bouton « terminé » Lorsque le bouton est cliqué, il affiche un message demandant au l'utilisateur pour scanner un code à barres ou annuler.
Cliquer sur le bouton 'Scan Barcode' lance une nouvelle activité qui lance le scan.
J'ai le code suivant mis en place pour lire le résultat de l'analyse sur le retour de l'analyse:
/* 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();
}
qui sort très simplement (pour l'instant) le résultat Avtivity dans un message de pain grillé. Le problème que j'ai, c'est que la méthode onActivityResult est déclenchée dès que j'appuie sur le bouton du code-barres de balayage.
Le processus de numérisation fonctionne très bien que je peux voir les résultats de l'analyse dans le logcat. Mais parce qu'elle est déclenchée trop tôt la méthode onActivityResult obtient jamais le résultat de l'analyse et le code de résultat est toujours -1
Est-ce que je manque une étape ici? Y a-t-il moyen d'arriver à onActivityResult pour attendre que l'activité se termine?
Merci
Kevin
Vous m'a sauvé au moins une heure de débogage avec cela! Je l'ai utilisé dans le fragment imbriqué de ViewFlipper et j'ai eu le même problème. La suppression d'une seule instance a résolu ce problème. – pkk
@pkk Heureux d'avoir été utile à quelqu'un! –
thx! android: launchMode = "singleTask" provoque aussi ce genre de problème – thecr0w