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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top