Android 嵌入Zxing库而不使用条形码扫描仪应用程序

Android 嵌入Zxing库而不使用条形码扫描仪应用程序,android,zxing,Android,Zxing,在不安装条形码扫描仪应用程序的情况下,嵌入zxing库以提供扫描的首选方式是什么?我希望在android中嵌入它,而不必提示用户进行任何额外安装。(与iPhone src的工作方式类似)。只需通过集成就很容易了。更可靠,您可以自动获得更新。虽然我不建议 该项目提供了完整的源代码。您希望从core/构建core.jar,并将其放入Androidlib/文件夹中,以便在应用程序中包含核心解码器。您不想包括javase。您可以在android/中查看代码,因为它是条形码扫描仪的源代码,但作为作者,我们

在不安装条形码扫描仪应用程序的情况下,嵌入zxing库以提供扫描的首选方式是什么?我希望在android中嵌入它,而不必提示用户进行任何额外安装。(与iPhone src的工作方式类似)。

只需通过集成就很容易了。更可靠,您可以自动获得更新。虽然我不建议

该项目提供了完整的源代码。您希望从
core/
构建
core.jar
,并将其放入Android
lib/
文件夹中,以便在应用程序中包含核心解码器。您不想包括
javase
。您可以在
android/
中查看代码,因为它是条形码扫描仪的源代码,但作为作者,我们建议您不要只是复制和粘贴它


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

Android QR/Barcode/Multiformat Decoder

我已经使用ZXing API制作了一个Android应用程序,并且只将解码代码嵌入到我的应用程序中。这个解码器的输入是通过Android仿真器的SD卡提供的

以下是步骤:

  • 首先,我在EclipseIDE中创建了一个AVD(emulator)版本4,并启用了SD卡和相机功能

  • 接下来,我在命令提示符下使用以下命令创建了SD卡:

    c:\>mksdcard 40M mysdcard.iso
    
     c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
    
    c:\>adb push "c:\myqrcode.png" /sdcard
    
  • 其中40M是我创建的SD卡的大小。它将保存在C:驱动器中。注意,.iso部分很重要

  • 接下来,我们必须在命令提示符下使用以下命令将SD卡装入仿真器:

    c:\>mksdcard 40M mysdcard.iso
    
     c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
    
    c:\>adb push "c:\myqrcode.png" /sdcard
    
  • 这里myavd4是我在步骤1中创建的emulator/android虚拟设备的名称。avd名称前的“@”符号也很重要

    让模拟器一直运行。如果它关闭,我们必须重做上面的3个步骤

  • 我们可以使用命令提示符中的以下命令将二维码或其他代码图像推送到安装在模拟器上的SD卡上:

    c:\>mksdcard 40M mysdcard.iso
    
     c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
    
    c:\>adb push "c:\myqrcode.png" /sdcard
    
  • 接下来,在EclipseIDE中,启动一个新的android项目。下面的代码应该粘贴到我们项目的qrdecorder.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);
    
        }
    
    }
    
  • 接下来,我从下面的链接下载了ZXing源代码(ZXing-1.6.zip)

    http://code.google.com/p/zxing/downloads/list
    
  • 然后,将其解压缩并导航到D:\zxing-1.6\core\src\com

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

    (注意,右键单击项目包并粘贴…如果它要求替换现有文件夹,请选择“是”)

  • 接下来,将下面的代码复制并粘贴到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>
    
  • 并更改QRDecoder.java中的输入以反映相同的结果

        Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");
    
    输入可以是任何格式,如QRCode、条形码等。图像类型可以是bmp、jpg或png

    我使用以下网站生成二维码用于测试


    谢谢,我想提一点,我只是android和移动应用程序开发的初学者,对于我可能犯的任何错误,我深表歉意……

    我自己也尝试过这种方法,最重要的是,这种方法似乎很有效

    虽然我有几点要说

  • 它将投诉包com.google.zxing.client.androidtest,该包是在包中找到并在QRDecoder活动中使用的RGBLuminanceSource类所需的 同时导入zxing/androidtest包

  • 如果要在包外添加Zxing库,则需要编辑所有R.java引用,因为它在包中找不到R.java文件

  • 例如:

    而不是

    mRunBenchmarkButton = (Button) findViewById(R.id.benchmark_run);
    
    在BenchmarkActivity.java文件中,使用

    mRunBenchmarkButton = (Button) findViewById(yourpackage.R.id.benchmark_run);
    
    我们还可以使用Eclipse的DDMS接口将QRCode推送到设备SD卡


    我试着嵌入了一段时间,直到我发现了Zbar。它们有一种更简单的嵌入方式,更少的代码和简单的示例


    如果您遵循Palani的答案,并且只想导入zxing core。以下是如何在不导入zxing.androidtest的情况下使用RGBLuminanceSource

    // 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();
    }
    
    您可以使用:

    条形码API在设备上以任何方向实时检测条形码。它还可以同时检测多个条形码

    它读取以下条形码格式:

    • 1D条形码:EAN-13、EAN-8、UPC-A、UPC-E、代码39、代码93、代码128、ITF、Codabar
    • 二维条形码:二维码,数据矩阵,PDF-417,阿兹特克
    它会自动解析QR码、数据矩阵、PDF-417和Aztec值,以获得以下支持的格式:

    • 网址
    • 联系信息(VCARD等)
    • 日历事件
    • 电子邮件
    • 电话
    • 短信
    • ISBN
    • 无线网络
    • 地理位置(纬度和经度)
    • AAMVA驾驶执照/身份证

    我更喜欢这个lib而不是googleplay服务,因为像往常一样,Google 播放服务要求在设备上安装相同的版本


    它将Zxing嵌入新的构建系统,并提供aar。真的很酷。

    下载核心和javase组件并嵌入它们,也许。但是,你需要查看许可证,看看你可以做什么,是否可以将其包含在你的程序中。使用Android库版本难道没有意义吗?有时,要求用户下载第三方应用程序并不是一个解决方案……已经有了一个库解决方案:
    core.jar
    。整个Android应用程序也可以重复使用(有时是不道德的复制)。我不确定什么更容易。core.jar之外有很多特定于android的代码。我认为MasterScrat要求一个Android库项目。一些可以给你提供视图和摄像头支持等,而不需要条形码扫描仪所需要的一切的东西