我试图通过触发意图将QRCode扫描仪集成到我的应用程序中 我使用的代码是以下
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
//响应集合
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
// Handle successful scan
String capturedQrValue =
intent.getStringExtra("SCAN_RESULT");
Log.i("info", "captureQrValue :" + capturedQrValue);
String format =
intent.getStringExtra("SCAN_RESULT_FORMAT");
Toast.makeText(
One.this,
"Scan Result:" + capturedQrValue + " scan format :"+ format,Toast.LENGTH_SHORT).show();
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
} else {
}
即使我没有安装ZXing示例条形码扫描器,我也遇到了无法正常工作的问题。
编辑:
是否可以将条形码扫描仪作为我应用的一部分。我对下载条码扫描器不感兴趣。
还有ZXing QRCode扫描的相机或Android版本规格???
不工作意味着 - 它要求从谷歌播放安装条形码扫描仪,我需要避免。
答案 0 :(得分:4)
我更愿意/建议使用Zbar而不是zxing。与zbar相比,zxing需要时间来阅读qr代码,而且你可能需要安装他们自己的(zxing)应用程序 - Barcode Scanner进行扫描。我试过两个,我发现zbar更好。从here下载zbar源代码。解压缩文件并将ZBarScannerLibrary导入为库项目。将此库添加到您的Android应用程序。另外将它添加到您的scanButton`
if (check_if_camera_is_available) {
Intent intent = new Intent(MyWallet.this, ZBarScannerActivity.class);
startActivityForResult(intent, ZBAR_SCANNER_REQUEST);
}
else
{
Toast.makeText(MyWallet.this, "Camera Unavailable", Toast.LENGTH_SHORT).show();
}`
同样在您的活动中声明这些变量,否则您可能会遇到错误
private static final int ZBAR_SCANNER_REQUEST = 0;
private static final int ZBAR_QR_SCANNER_REQUEST = 1;
最后在你的清单文件中添加这个
<activity android:name="com.dm.zbar.android.scanner.ZBarScannerActivity"
android:screenOrientation="landscape"
android:label="@string/app_name" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
希望这会有所帮助: - )
答案 1 :(得分:2)
Zxing是开源的,您可以将其包含在您的应用中(但此lib的创建者不鼓励在stackoveflow问题中阅读此行为)。
虽然您必须尊重ZXing的Apache许可证2.0。
很简单:
R
application
必须与<application/>
启动意图或创建自己的public class ScanActivity extends CaptureActivity
并管理结果
@Override
public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor){
String barcodeRead = rawResult.getText();
if(!MyValidator.isMyBarcode(barcodeRead))return;
Intent viewDetails = new Intent(this, DetailActivity.class);
viewDetails.putExtra(DetailActivity.EXTRA_BARCODE, barcodeRead);
viewDetails.putExtra(DetailActivity.EXTRA_SESSION, "some extras");
startActivity(viewDetails);
finish();
}
最后但并非最不重要的是在你的应用中为这个lib添加一些功劳!!