続行する前にバーコードをスキャンしてコードを取得する必要があるアプリがあります。このコードを使用してスキャンアクティビティを開始します。
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 */
}
});
上記のコードは、。というラベルの付いたボタンにリスナーを設定しますfinished
。ボタンをクリックすると、バーコードをスキャンするかキャンセルするかを尋ねるプロンプトが表示されます。
ボタンをクリックするとScan Barcode、スキャンを開始する新しいアクティビティが開始されます。
スキャンから戻ったときにスキャンの結果を読み取るために、次のコードを設定しています。
/* 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();
}
これは非常に単純に(今のところ)アクティビティ結果をトーストメッセージに出力します。
私が抱えている問題はonActivityResult
、スキャンバーコードボタンを押すとすぐにメソッドがトリガーされることです。
logcatでスキャンの結果を確認できるため、スキャンプロセスは正常に機能します。ただし、トリガーが早すぎるため、onActivityResult
メソッドがスキャン結果を取得することはなく、結果コードは常に-1です。
私はここで一歩を逃していますか?onActivityResult
アクティビティが実際に終了するまで待つ方法はありますか?