我想在我的应用程序中实现QR Code / Barcode阅读器.我想知道什么是最轻量级的解决方案(无视zxing的意图集成商).
解决方法
我用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,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显示您捕获的图像,以及按钮以启动摄像头. .这是基于2.1zxing.