embeddedZxing库而不使用条码扫描器应用程序

在没有安装Barcode Scanner应用程序的情况下embeddedzxing库来提供扫描的首选方法是什么? 我正在寻找embedded到android,而不必提示用户进行任何额外的安装。 (类似于iPhone src的工作方式)。

通过Intent集成真的很容易。 更可靠,并自动更新。 虽然我不build议…

完整的源代码可以在ZXing项目中find。 你想从core/ core.jar ,并把它放在你的Android lib/文件夹中,将核心解码器包含在你的应用程序中。 你不想包括javase 。 你可以看看android/ code中的代码,因为它是Barcode Scanner的源代码,但作为作者,我们build议你不要复制和粘贴它。

这是Apache许可 ,意味着您可以自由使用它,只要您基本上允许用户访问许可条款。

Android QR /条码/多格式解码器。

我已经使用ZXing API制作了一个Android应用程序,并且只将解码代码embedded到我的应用程序中。 这个解码器的input是通过Android模拟器的SD卡给出的。

这里是步骤:

  1. 首先,我在Eclipse IDE中创build了一个AVD(模拟器)版本4,SD卡和相机function打开。

  2. 接下来,我使用命令提示符下面的命令创build了一个SDCard:

     c:\>mksdcard 40M mysdcard.iso 

其中40M是我创build的SD卡的大小..这将被保存在C:驱动器。 请注意,.iso部分很重要。

  1. 接下来,我们必须在命令提示符下使用以下命令将SD卡安装到仿真器中:

      c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4 

这里myavd4是我在步骤1中创build的模拟器/ android虚拟设备的名称。avd名称之前的“@”符号也很重要。

保持模拟器始终运行。如果closures,我们必须重新执行上述3个步骤。

  1. 我们可以使用命令提示符下面的命令将QR码或其他代码图像插入到我们的模拟器上安装的SD卡中:

     c:\>adb push "c:\myqrcode.png" /sdcard 
  2. 接下来,在Eclipse IDE中,启动一个新的android项目。 下面的代码应该粘贴在我们项目的QRDecoder.java文件中。

     package com.example.palani; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; 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.client.androidtest.RGBLuminanceSource; import com.google.zxing.common.HybridBinarizer; public class QRDecoder extends Activity implements OnClickListener { public static class Global { public static String text=null; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Bitmap bMap = BitmapFactory.decodeFile("/sdcard/myqrcode.png"); TextView textv = (TextView) findViewById(R.id.mytext); View webbutton=findViewById(R.id.webbutton); LuminanceSource source = new RGBLuminanceSource(bMap); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Reader reader = new MultiFormatReader(); try { Result result = reader.decode(bitmap); Global.text = result.getText(); byte[] rawBytes = result.getRawBytes(); BarcodeFormat format = result.getBarcodeFormat(); ResultPoint[] points = result.getResultPoints(); textv.setText(Global.text); webbutton.setOnClickListener(this); } catch (NotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ChecksumException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FormatException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void onClick(View v) { Uri uri = Uri.parse(Global.text); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent); } } 
  3. 接下来我从下面的链接下载了ZXing源代码(ZXing-1.6.zip)。

     http://code.google.com/p/zxing/downloads/list 

然后,解压缩并导航到D:\ zxing-1.6 \ core \ src \ com

复制com文件夹并将其粘贴到Eclipse中的包中。

(请注意,右键单击我们项目的包并粘贴…如果它要求replace现有的文件夹,请select是)

  1. 接下来,将以下代码复制并粘贴到res / layout / main.xml文件中

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="20dip" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="@color/mbackground1" android:gravity="center_horizontal" android:text="@string/decode_label" android:padding="20dip" /> <TextView android:id="@+id/mytext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:background="@color/mbackground2" android:textColor="@color/mytextcolor" android:padding="20dip" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/continue_label" android:gravity="center_horizontal" android:textColor="@color/mytextcolor" android:padding="20dip" /> <Button android:id="@+id/webbutton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/web_button" android:textColor="@color/mytextcolor" /> </LinearLayout> 
  2. 接下来,将下面的代码复制并粘贴到res / values / strings.xml文件中

     <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, QRDecoder!</string> <string name="app_name">QRDecoder</string> <string name="continue_label">Click below to load the URL!!</string> <string name="web_button">Load the URL!!</string> <string name="decode_label">Decoded URL</string> </resources> 
  3. 接下来,将以下代码复制并粘贴到res / values / color.xml文件中(如果不存在),请创build一个。

     <?xml version="1.0" encoding="utf-8"?> <resources> <color name="mbackground1">#7cfc00</color> <color name="mbackground2">#ffff00</color> <color name="mytextcolor">#d2691e</color> </resources> 
  4. 接下来,将下面的代码复制并粘贴到清单文件中的开始标记之后

     <manifest> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
  5. 所以,上述步骤完成…我们的应用程序已经准备就绪。 现在,你可以运行应用程序,它会给你我们给出的input图像的解码结果。

  6. 为了改变input,使用命令提示符下面的命令将另一个文件推到SD卡

     c:\>adb push "c:\image2.png" /sdcard 

并改变QRDecoder.java中的input以反映相同的内容

  Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png"); 

input可以是像QRCode,条码等任何格式….图像的types可以是BMP,JPG或PNG。

我使用下面的网站来生成用于testing目的的QR码

http://barcode.tec-it.com/

http://qrcode.kaywa.com

谢谢,我想提一点,我只是一个在Android和移动应用程序开发初学者,并为我可能已经做的任何错误抱歉…

如果遵循Palani的回答,只想导入zxing核心。 这里是你如何使用RGBLuminanceSource而不需要导入zxing.androidtest

 // import com.google.zxing.client.androidtest.RGBLuminanceSource; import com.google.zxing.RGBLuminanceSource; // Bitmap mBitmap; // some bitmap... int width = mBitmap.getWidth(); int height = mBitmap.getHeight(); int[] pixels = new int[width * height]; mBitmap.getPixels(pixels, 0, width, 0, 0, width, height); RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels); BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source)); try { Result result = zxingReader.decode(binaryBitmap); } catch (Exception e) { e.printStackTrace(); } 

现在您可以使用Google的官方Barcode API :

条形码API以任何方向实时检测设备上的条形码。 它也可以一次检测多个条形码。

它读取以下条形码格式:

  • 一维条码:EAN-13,EAN-8,UPC-A,UPC-E,Code-39,Code-93,Code-128,ITF,Codabar
  • 二维条码:QR Code,Data Matrix,PDF-417,AZTEC

它会自动parsingQR码,Data Matrix,PDF-417和Aztec值,以下支持的格式:

  • url
  • 联系信息(VCARD等)
  • 日历活动
  • 电子邮件
  • 电话
  • 短信
  • 国际标准书号
  • 无线上网
  • 地理位置(经度和纬度)
  • AAMVA驾驶执照/身份证

我自己试过这个方法,大部分似乎都起作用了。

虽然我有几点要做

  1. 它会抱怨com.google.zxing.client.androidtest软件包,它是包中find的RGBLuminanceSource类所需要的,并在QRDecoder Activity中使用。导入zxing / androidtest包也是如此。

  2. 如果你在包的外面添加Zxing库,那么你将需要编辑所有R.java引用,因为它不会在它的包中findR.java文件。

例如:

代替

 mRunBenchmarkButton = (Button) findViewById(R.id.benchmark_run); 

在BenchmarkActivity.java文件中使用

 mRunBenchmarkButton = (Button) findViewById(yourpackage.R.id.benchmark_run); 

我们也可以使用Eclipse的DDMS接口将QR码推送到设备的SDCard。

使用DDMS

https://github.com/dm77/barcodescanner

我比较喜欢Google Play服务的这个lib,因为像往常一样,Google Play服务需要在设备上安装相同的版本。

它将Zxing与新的构build系统embedded在一起,并提供一个aar。 真的很酷。

我试图embeddedZXing (XZing)一段时间,直到我发现Zbar。 他们有一个easyerembedded式的方式,更less的代码和简单的例子。

http://sourceforge.net/projects/zbar/