ZXing二维码/条码扫描

时间:2014-03-19 06:04:49

标签: android zxing

我试图通过触发意图将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版本规格???

不工作意味着 - 它要求从谷歌播放安装条形码扫描仪,我需要避免。

2 个答案:

答案 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。

很简单:

  1. 在项目中包含lib
  2. 更正problem in android while generating R
  3. 的部分代码
  4. zxing manifest中的application必须与<application/>
  5. 类似
  6. 启动意图或创建自己的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();
    }
    
  7. 最后但并非最不重要的是在你的应用中为这个lib添加一些功劳!!