ZXing是一个开源的条码生成和扫描库。它不但支持众多的条码格式,而且有各种语言的实现版本,它支持的语言包括:Java、 C++、 C#、 Objective-C、ActionScript以及Ruby。

http://code.google.com/p/zxing/downloads/list
版本:ZXing-2.3.0

(1)把ZXing的以下两个jar包放入android工程的libs下
引用 core/core.jar
javase/javase.jar

(2)生成二维码
public class QRCodeGenerateActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_qrcode_generate);        Button button = (Button) findViewById(R.id.generate_button);        button.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                EditText editText = (EditText) findViewById(R.id.code_content);                Bitmap qrcode = generateQRCode(editText.getText().toString());                ImageView imageView = (ImageView) findViewById(R.id.code_image);                imageView.setImageBitmap(qrcode);            }        });    }    private Bitmap bitMatrix2Bitmap(BitMatrix matrix) {        int w = matrix.getWidth();        int h = matrix.getHeight();        int[] rawData = new int[w * h];        for (int i = 0; i < w; i++) {            for (int j = 0; j < h; j++) {                int color = Color.WHITE;                if (matrix.get(i, j)) {                    color = Color.BLACK;                }                rawData[i + (j * w)] = color;            }        }        Bitmap bitmap = Bitmap.createBitmap(w, h, Config.RGB_565);        bitmap.setPixels(rawData, 0, w, 0, 0, w, h);        return bitmap;    }    private Bitmap generateQRCode(String content) {        try {        QRCodeWriter writer = new QRCodeWriter();            // MultiFormatWriter writer = new MultiFormatWriter();            BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, 500, 500);            return bitMatrix2Bitmap(matrix);        } catch (WriterException e) {            e.printStackTrace();        }        return null;    }}



(3)扫描二维码
private PreviewCallback mPreviewCallback = new PreviewCallback() {    @Override    public void onPreviewFrame(byte[] data, Camera camera) {        int previewWidth = camera.getParameters().getPreviewSize().width;        int previewHeight = camera.getParameters().getPreviewSize().height;        PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource(                data, previewWidth, previewHeight, 0, 0, previewWidth,                previewHeight, false);        BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));        Reader reader = new QRCodeReader();        // Reader reader = new MultiFormatReader();        try {            Result result = reader.decode(bitmap);            String text = result.getText();            Intent intent = new Intent();            intent.setData(Uri.parse(text));            setResult(RESULT_OK, intent);            finish();        } catch (Exception e) {            e.printStackTrace();            Toast.makeText(getApplicationContext(), "Not Found", Toast.LENGTH_SHORT).show();        }    }};

更多相关文章

  1. C语言函数的递归(上)
  2. 如果你现在学Android---学习使用Kotlin进行Android开发
  3. Android开发入门
  4. [置顶] Android开源图表库XCL-Charts版本发布及展示页
  5. Android(安卓)自动检测版本并升级
  6. Android应用的自动升级、更新模块的实现
  7. android 条码识别软件开发全解析(续1详解)
  8. Android(安卓)Studio使用Volley
  9. android 使用第三方(ShareSDK)分享

随机推荐

  1. Android应用开发相关下载资源
  2. Android sms 发送、接收及格式
  3. android:windowSoftInputMode属性使用
  4. Android API Level对应Android版本一览表
  5. android参考例子
  6. Android系统版本与API Level对照表
  7. android 布局大全
  8. 使用 ViewStub 延迟展开视图
  9. android的两个设置标题主题属性
  10. LinearLayout和RelativeLayout布局中使用