在不使用Barcode Scanner应用程序的情况下嵌入Zxing库

Joe*_*ter 58 android zxing

在没有安装Barcode Scanner应用程序的情况下,嵌入zxing库以提供扫描的首选方法是什么?我希望将它嵌入到android中,而不必提示用户任何额外的安装.(类似于iPhone src的工作方式).

Sea*_*wen 59

通过Intent进行集成真的更容易.更可靠,您可以自动获得更新.虽然我不建议......

完整的源代码可从ZXing项目获得.你想建立core.jarcore/,并把它放在你的Android lib/文件夹包含在您的应用程序的核心解码器.你不想包括javase.您可以查看代码,android/因为它是条形码扫描器的来源,但作为作者,我们建议您不要只复制并粘贴它.

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

  • 拥有Android库版本不是很有意义吗?有时候要求用户下载第三方应用程序并不是解决方案...... (63认同)
  • 在core.jar之外有一个*lot*特定于android的代码.我认为MasterScrat要求一个*Android*库项目.没有BarcodeScanner所需的一切,可以为您提供视图和相机支持等. (12认同)
  • 已有一个库解决方案:`core.jar`.整个Android应用程序也可以重复使用(有时是不道德的复制).我不确定什么可以更容易. (6认同)
  • 我明白那个.作为库真正可重用的部分已经在核心中可用.Android代码不是那么可以打包的; source可能是这些位最有意义的"打包".提供完整的可嵌入UI不是目标 - 整个应用程序可由Intent作为API访问. (3认同)
  • @konopko解码库已经作为库分解.你只想要一个预制的应用程序来克隆.我不希望你这样做.这不是Android的工作方式.您的论点和其他人只是比制作自己的应用程序更容易或更有利可图.我发现这并不令人信服. (2认同)
  • @RowlandMtetezi然后你应该使用这个库创建自己的嵌入式QR阅读器.那是你的工作.意图也是一种选择. (2认同)

Pal*_*abu 29

Android QR /条形码/多格式解码器.

我使用ZXing API创建了一个Android应用程序,并且只将解码代码嵌入到我的应用程序中.该解码器的输入是通过Android模拟器的SD卡给出的.

以下是步骤:

  1. 首先,我在Eclipse IDE中创建了一个AVD(仿真器)版本4,其中SDcard和Camera功能已打开.

  2. 接下来,我在命令提示符中使用以下命令创建了一个SDCard:

    c:\>mksdcard 40M mysdcard.iso
    
    Run Code Online (Sandbox Code Playgroud)

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

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

     c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
    
    Run Code Online (Sandbox Code Playgroud)

这里myavd4是我在步骤1中创建的模拟器/ android虚拟设备的名称.avd名称前面的'@'符号也很重要.

保持模拟器始终运行.如果它关闭,我们必须重做上述3个步骤.

  1. 我们可以使用命令提示符中的以下命令将我们拥有的QR码或其他代码图像推送到我们的仿真器上安装的SD卡:

    c:\>adb push "c:\myqrcode.png" /sdcard
    
    Run Code Online (Sandbox Code Playgroud)
  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);
    
        }
    
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 接下来,我从下面的链接下载了ZXing源代码(ZXing-1.6.zip).

    http://code.google.com/p/zxing/downloads/list
    
    Run Code Online (Sandbox Code Playgroud)

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

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

(注意,右键单击我们项目的包并粘贴...如果要求替换现有文件夹,请选择是)

  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>
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 接下来,将以下代码复制并粘贴到res/values/color.xml文件中,如果它不存在,则创建一个.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <color name="mbackground1">#7cfc00</color>
    <color name="mbackground2">#ffff00</color>
    <color name="mytextcolor">#d2691e</color>
    </resources>
    
    Run Code Online (Sandbox Code Playgroud)
  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" />      
    
    Run Code Online (Sandbox Code Playgroud)
  5. 所以,上面的这些步骤已经完成......我们的应用已准备好 现在,你可以运行应用程序,它将给你我们给出的输入图像的解码结果.

  6. 要更改输入,请在命令提示符中使用以下命令将另一个文件推送到SD卡

    c:\>adb push "c:\image2.png" /sdcard
    
    Run Code Online (Sandbox Code Playgroud)

并更改QRDecoder.java中的输入以反映相同的内容

    Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");
Run Code Online (Sandbox Code Playgroud)

输入可以是任何格式,如QRCode,条形码等....图像的类型可以是bmp,jpg或png.

我使用以下网站生成用于测试目的的QR码

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

http://qrcode.kaywa.com

谢谢,我想提一下,我只是Android和移动应用程序开发的初学者,对于我可能做过的任何错误感到抱歉...