ZXing QR码/条形码扫描

3

我曾尝试通过触发意图将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示例条形码扫描仪,则无法正常工作。
编辑:
  • 是否可能将Barcode Scanner作为我的应用程序的一部分。不想下载Barcode Scanner。

  • 此外,是否有任何相机或Android版本规格可用于ZXing QRCode扫描???

“不起作用”意味着它要求从Google Play安装条形码扫描仪,我需要避免这种情况。

在Stack Overflow上,当你说“不起作用”时,你真的应该具体说明是什么问题。 - Sean Owen
查询已更新,希望解释足够清楚。 - Geethu
2个回答

4

我建议您使用Zbar而不是zxing。与zxing相比,zbar读取qr码需要的时间更短,而且您可能需要安装它们自己的(zxing)应用程序- Barcode Scanner 扫描。我尝试过两者,发现zbar更好。从这里下载zbar源代码。解压文件并将ZBarScannerLibrary作为库项目导入。将此库添加到您的Android应用程序中。同时,将此项添加到您的扫描按钮`。

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
该项目将不再维护。这个可能是一个更好的建议。 - Manuel Spigolon

2

Zxing是开源的,你可以在你的应用中使用它(但是这个库的创建者在stackoverflow的问题中不鼓励这种行为)

尽管如此,你必须尊重ZXing的Apache许可证2.0。

很简单:

  1. include the lib in your project
  2. correct some code for a problem in android while generating R
  3. the application in zxing manifest must be like this <application/>
  4. start an intent or create your own public class ScanActivity extends CaptureActivity and manage the results

    @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();
    }
    
最后但同样重要的是,在您的应用程序中为此库添加一些信誉!

1
明确一点:我鼓励人们重用任何开源代码。但是必须以尊重法律的方式进行。这包括尊重商标和版权。问题出现在人们复制粘贴整个应用程序时。千万不要这样做。 - Sean Owen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接