我成功地使用zxing来扫描代码,通过调用已安装的条形码阅读器的意图,但是当它发出蜂鸣声并指示良好的扫描时,我希望zxing活动将返回控制,以便我可以处理结果,但它坐在那里并尝试再次扫描。我必须按下后退按钮 然后 它返回,我可以做下一步。当我打电话给扫描仪时,是否有一些明显的标志?
任何建议都感激不尽。非常感谢。
这是我的代码:
public boolean onTouchEvent(final MotionEvent event) {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
return true;
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
// Handle successful scan
String s = "http://www.google.com/search?q=";
s += contents;
Intent myIntent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(s));
startActivity(myIntent1);
}
else
if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}
}
为什么不使用提供的 IntentIntegrator
类?这是项目文档中提到的唯一方法,你看过那些吗? https://github.com/zxing/zxing/wiki/Scanning-Via-Intent
我创建它来包含发送和解析Intent的这些细节,所以你不要拼写错误。例如,没有额外的“com.google.zxing.client.android.SCAN.SCAN_MODE”。
为什么不使用提供的 IntentIntegrator
类?这是项目文档中提到的唯一方法,你看过那些吗? https://github.com/zxing/zxing/wiki/Scanning-Via-Intent
我创建它来包含发送和解析Intent的这些细节,所以你不要拼写错误。例如,没有额外的“com.google.zxing.client.android.SCAN.SCAN_MODE”。
这是我自己的问题的完整答案,希望这有助于某人:
走 这里 并复制整个IntentIntegrator类,将其添加到您的应用程序;也去 这里 并将IntentResult类复制到您的应用程序。现在将其添加到您的活动中(或通过按钮/其他触发扫描):
public boolean onTouchEvent(final MotionEvent event) {
IntentIntegrator integrator = new IntentIntegrator(this);
integrator.initiateScan();
return true;
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
if (scanResult != null) {
// handle scan result
String s = "http://www.google.com/search?q=";
s += scanResult.getContents();
Intent myIntent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(s));
startActivity(myIntent1);
}
// else continue with any other code you need in the method
//...
}
如果只是调用条码扫描器应用程序提供的服务而不是将代码块复制并粘贴到您自己的应用程序中,那会很棒,但这似乎是推荐的方式:(
添加finishActivity(requestCode);在onActivityResult()方法的最后。
尝试这个:
使用以下代码替换onTouch中的前两行。似乎问题是扫描QR以外的代码。请删除扫描过滤器并检查一次。
Intent intent = new Intent(“com.google.zxing.client.android.SCAN”);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
我遇到了同样的问题所以我尝试使用Sean Owen推荐的IntentIntegrator类。我仍然遇到了问题,直到我意识到这只是在尝试以纵向扫描条形码时(最常见的是在手机上)。事实证明,从纵向到横向的方向变化会导致双重扫描。我通过添加来解决这个问题 android:configChanges="orientation|keyboardHidden|screenSize"
我的清单中的活动。您可能只需要一个方向,但这是未经测试的。
对于在创建Adobe AIR Native Extension时遇到此问题的任何用户,请确保不仅将该行添加到您的Android项目清单中,还将其添加到app.xml中的android manifest添加内容中的activity标记。
这是我正在使用的解决方案。它对我来说很好。
Intent intent = new Intent(SelectOptionActivity.this, CaptureActivity.class);
intent.putExtra("SCAN_MODE", "ONE_D_MODE");
intent.putExtra("SCAN_FORMATS", "CODE_39,CODE_93,CODE_128,DATA_MATRIX,ITF,CODABAR,EAN_13,EAN_8,UPC_A,QR_CODE");
intent.setAction(Intents.Scan.ACTION);
startActivityForResult(intent, 1);
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 1 && resultCode == RESULT_OK) {
final String contents = intent.getStringExtra(Intents.Scan.RESULT);
final String formatName = intent.getStringExtra(Intents.Scan.RESULT_FORMAT);
}
}