【问题标题】:Barcode/Qr Code Reader for Android [closed]适用于 Android 的条码/二维码阅读器 [关闭]
【发布时间】:2012-11-28 00:54:13
【问题描述】:

我想在我的应用程序中实现一个二维码/条形码阅读器。我想知道最轻量级的解决方案是什么(不考虑 zxing 的意图集成器)。

【问题讨论】:

  • zxing的intent integrator有什么问题?
  • 我不希望用户为了下载条形码扫描仪而离开应用程序,我希望在应用程序内提供解决方案
  • Zxing提供完整代码,可以和你的app集成
  • 您可以将 zxing 用作应用程序的一部分。只需将其添加为库并使用它来调用捕获意图。
  • jmanzano.es/blog/?p=244你可以看教程

标签: android barcode qr-code


【解决方案1】:

我使用 zxing 构建到我的应用程序中。您将需要一些编码。首先包含 core.jar ,它在 core/core.jar,在你的构建路径中,然后去他们的客户端,它在 android/..../com.google.zxing,并获取他们的代码(这不是推荐的开发人员,因为您的复制和粘贴。)最后,添加此代码:

   package com.wtsang02.activities;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.ChecksumException;
import com.google.zxing.FormatException;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Reader;
import com.google.zxing.Result;
import com.google.zxing.ResultPoint;
import com.google.zxing.common.HybridBinarizer;


public class QRDecoder extends Activity implements OnClickListener {

    private String text;
    private Button webbutton;
    private Bitmap bmp;
    private ImageView ivPicture;
    private TextView textv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mysales);
        webbutton = (Button)findViewById(R.id.webbutton);

        ivPicture = (ImageView) findViewById(R.id.ivPicture);
        textv= (TextView) findViewById(R.id.mytext);

        webbutton.setOnClickListener(this);
    }

    private void decode() {


        if (bmp == null) {
            Log.i("tag", "wtf");
        }
        bmp = bmp.copy(Bitmap.Config.ARGB_8888, true);

        int[] intArray = new int[bmp.getWidth() * bmp.getHeight()];
        bmp.getPixels(intArray, 0, bmp.getWidth(), 0, 0, bmp.getWidth(),
                bmp.getHeight());

        LuminanceSource source = new com.google.zxing.RGBLuminanceSource(
                bmp.getWidth(), bmp.getHeight(), intArray);
        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
        Reader reader = new MultiFormatReader();
        try {
            Result result = reader.decode(bitmap);

            text = result.getText();
            byte[] rawBytes = result.getRawBytes();
            BarcodeFormat format = result.getBarcodeFormat();
            ResultPoint[] points = result.getResultPoints();
            textv.setText(text);

        } catch (NotFoundException e) {

            e.printStackTrace();
        } catch (ChecksumException e) {

            e.printStackTrace();
        } catch (FormatException e) {

            e.printStackTrace();

        }
        Log.i("done", "done");
        if(text!=null)
        Toast.makeText(getBaseContext(), text, Toast.LENGTH_LONG).show();
        else{
            Toast.makeText(getBaseContext(), "QQ", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onClick(View v) {

        Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(i, 0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle extras = data.getExtras();
            bmp = (Bitmap) extras.get("data");
            ivPicture.setImageBitmap(bmp);
            decode();
        }

    }

}

此代码将使用您手机的默认摄像头,如果您需要使用他们的客户端,则需要启动他们的CaptureActivity,您的布局应包含TextView 以显示结果,ImageView 以显示您的图像捕获,然后Button 启动相机。 .这是基于 2.1zxing 的。

【讨论】:

  • 从客户端获取什么代码?我误解了那部分
  • +1 展示了如何构建一个简单的新应用,而不是完全复制条形码扫描仪应用。
  • 更新了帖子,我在其中说明了位置。它基本上都在您下载 zxing2.1 的 zip 文件中
  • 这段代码一启动就会抛出异常,应用程序崩溃:(
  • com.google.zxing.NotFoundException,在编写 LuminanceSource source = new RGBLuminanceSource(200, 200, intArray); 行时,我被要求添加此异常; BinaryBitmap 位图 = new BinaryBitmap(new HybridBinarizer(source));阅读器 reader = new MultiFormatReader();结果result = reader.decode(bitmap);
【解决方案2】:

你可以使用:

  • zbar(SDK 有一个很好的例子)。
  • zxing

【讨论】:

    【解决方案3】:

    嘿,从link 下载 Biggu Barcode Scanner 的示例,提取演示项目并将其导入 eclipse。 zip 文件有演示示例,您可以根据需要使用并集成到您的应用中

    【讨论】:

    • 马上试一试
    • 似乎只能在这个上选择 QR 或 BARCODE
    猜你喜欢
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多