Pourquoi est déclenchée onActivityResult avant l'activité commence même?
-
29-09-2019 - |
Question
J'ai une application qui doit numériser un code-barres pour obtenir un code avant de pouvoir continuer. J'utilise ce code pour démarrer 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 */
}
});
Le code ci-dessus définit un écouteur sur un bouton finished
. Lorsque le bouton est cliqué, il affiche un message demandant à l'utilisateur de scanner un code-barres ou annuler.
En cliquant sur le bouton Scan Barcode démarre une nouvelle activité qui démarre 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();
}
Ce qui très simplement (pour l'instant) affiche le résultat de l'activité dans un message de pain grillé.
Le problème que je vais avoir est que la méthode de onActivityResult
est déclenchée dès que j'appuie sur le bouton de 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
Suis-je manque une étape ici? est il someway de se rendre à onActivityResult
d'attendre jusqu'à ce que l'activité se termine réelle?
La solution
Il semble que le scanner de code-barres J'utilise a un bug particulier pour les interfaces onglet avec instance unique dans le manifeste qui est de savoir comment je l'avais.
Retrait de la stipulation d'instance unique m'a permis de faire un hack sur thats it fonctionne parfaitement.