Android 嵌入Zxing库而不使用条形码扫描仪应用程序
在不安装条形码扫描仪应用程序的情况下,嵌入zxing库以提供扫描的首选方式是什么?我希望在android中嵌入它,而不必提示用户进行任何额外安装。(与iPhone src的工作方式类似)。只需通过集成就很容易了。更可靠,您可以自动获得更新。虽然我不建议 该项目提供了完整的源代码。您希望从Android 嵌入Zxing库而不使用条形码扫描仪应用程序,android,zxing,Android,Zxing,在不安装条形码扫描仪应用程序的情况下,嵌入zxing库以提供扫描的首选方式是什么?我希望在android中嵌入它,而不必提示用户进行任何额外安装。(与iPhone src的工作方式类似)。只需通过集成就很容易了。更可靠,您可以自动获得更新。虽然我不建议 该项目提供了完整的源代码。您希望从core/构建core.jar,并将其放入Androidlib/文件夹中,以便在应用程序中包含核心解码器。您不想包括javase。您可以在android/中查看代码,因为它是条形码扫描仪的源代码,但作为作者,我们
core/
构建core.jar
,并将其放入Androidlib/
文件夹中,以便在应用程序中包含核心解码器。您不想包括javase
。您可以在android/
中查看代码,因为它是条形码扫描仪的源代码,但作为作者,我们建议您不要只是复制和粘贴它
这意味着您可以自由使用它,只要您基本上允许用户访问许可条款。Android QR/Barcode/Multiformat Decoder 我已经使用ZXing API制作了一个Android应用程序,并且只将解码代码嵌入到我的应用程序中。这个解码器的输入是通过Android仿真器的SD卡提供的 以下是步骤:
c:\>mksdcard 40M mysdcard.iso
c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
c:\>adb push "c:\myqrcode.png" /sdcard
c:\>mksdcard 40M mysdcard.iso
c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
c:\>adb push "c:\myqrcode.png" /sdcard
c:\>mksdcard 40M mysdcard.iso
c:\>emulator -sdcard "c:\mysdcard.iso" @myavd4
c:\>adb push "c:\myqrcode.png" /sdcard
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);
}
}
http://code.google.com/p/zxing/downloads/list
<?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>
Bitmap bMap = BitmapFactory.decodeFile("/sdcard/image.png");
输入可以是任何格式,如QRCode、条形码等。图像类型可以是bmp、jpg或png
我使用以下网站生成二维码用于测试
及
谢谢,我想提一点,我只是android和移动应用程序开发的初学者,对于我可能犯的任何错误,我深表歉意……我自己也尝试过这种方法,最重要的是,这种方法似乎很有效 虽然我有几点要说
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,阿兹特克
- 网址
- 联系信息(VCARD等)
- 日历事件
- 电子邮件
- 电话
- 短信
- ISBN
- 无线网络
- 地理位置(纬度和经度)
- AAMVA驾驶执照/身份证
它将Zxing嵌入新的构建系统,并提供aar。真的很酷。下载核心和javase组件并嵌入它们,也许。但是,你需要查看许可证,看看你可以做什么,是否可以将其包含在你的程序中。使用Android库版本难道没有意义吗?有时,要求用户下载第三方应用程序并不是一个解决方案……已经有了一个库解决方案:
core.jar
。整个Android应用程序也可以重复使用(有时是不道德的复制)。我不确定什么更容易。core.jar之外有很多特定于android的代码。我认为MasterScrat要求一个Android库项目。一些可以给你提供视图和摄像头支持等,而不需要条形码扫描仪所需要的一切的东西