Warum ist onActivityResult ausgelöst, bevor die Aktivität selbst beginnt?
-
29-09-2019 - |
Frage
ich eine App haben, dass der Bedarf einen Barcode scannen um einen Code zu erhalten, bevor es weitergehen kann. Ich benutze diesen Code die Prüfaktivität zu starten:
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 */
}
});
Der obige Code setzt einen Hörer auf eine Schaltfläche mit der Bezeichnung finished
. Wenn die Schaltfläche geklickt wird, zeigt es eine Aufforderung, den Benutzer auffordert, einen Barcode zu scannen oder stornieren.
Durch Klicken auf die Scan Barcode Taste startet eine neue Aktivität, die die Scan beginnt.
Ich habe den folgenden Code eingerichtet das Ergebnis des Scans auf der Rückkehr zu lesen aus dem Scan:
/* 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();
}
, die sehr einfach (noch) gibt das Aktivitätsergebnis in einem Toast Nachricht.
Das Problem, das ich habe, ist, dass die onActivityResult
Methode so schnell ausgelöst wird, wie ich die Scan-Barcode-Taste drücken.
Der Scan-Vorgang funktioniert gut, wie ich die Ergebnisse des Scans in der logcat sehen kann., Aber weil es zu ausgelöst wird, sobald die onActivityResult
Methode wird nie das Scan-Ergebnis und das Ergebnis Code wird immer -1
fehlt bin ich einen Schritt hier? bis die Aktivität tatsächlich beendet wird someway zu onActivityResult
kennen warten?
Lösung
Es scheint, wie der Barcode-Scanner verwende ich einen besonderen Fehler in der es für Registerkarte Schnittstellen mit einzelner Instanz im Manifest, das ist, wie ich es hatte.
die einzige Instanz Bedingung Entfernen erlaubte mir einen Hack zu tun, auf es das ist, perfekt zu arbeiten.