Android开发 QRCode二维码开发第三方框架

前言

  Android开发里二维码开发经常用到,这里简单的介绍下Android开发里的二维码.

最广泛使用的二维码库zxing

  zxing是最广泛的二维码库各个平台都可以适用它,但是Android平台使用它好像需要进行JNI处理.但是,github上大神已经帮我们做好了,下面我会介绍一个好用的二维码框架.这里提zxing是让你知道很多二维码框架的封装源头都是它.

github地址: https://github.com/zxing/zxing

QRCodeReaderView 第三方二维码框架

github地址:https://github.com/dlazaro66/QRCodeReaderView

这个框架已经将zxing打包封装好了,你直接使用即可,甚至还能使用依赖它后独立使用zxing的功能.(比如生成二维码图片)

ps: 这个框架也支持条形码

依赖

dependencies{
      compile 'com.dlazaro66.qrcodereaderview:qrcodereaderview:2.0.3'
}

扫码识别内容

这里偷懒引用作者的代码...

xml里

 <com.dlazaro66.qrcodereaderview.QRCodeReaderView
        android:id="@+id/qrdecoderview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

activity里

public class DecoderActivity extends Activity implements OnQRCodeReadListener {

        private TextView resultTextView;
        private QRCodeReaderView qrCodeReaderView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_decoder);

            qrCodeReaderView = (QRCodeReaderView) findViewById(R.id.qrdecoderview);
            qrCodeReaderView.setOnQRCodeReadListener(this);

            // 使用此功能启用/禁用解码
            qrCodeReaderView.setQRDecodingEnabled(true);

            // 使用此功能更改自动对焦间隔(默认为5秒)
            qrCodeReaderView.setAutofocusInterval(2000L);

            // 使用此功能启用/禁用手电筒
            qrCodeReaderView.setTorchEnabled(true);

            // 使用此功能设置前置摄像头预览
            qrCodeReaderView.setFrontCamera();

            // 使用此功能设置后置相机预览
            qrCodeReaderView.setBackCamera();
        }

        // QR解码后调用
        // “text”: QR编码的文字
        // "points" :在视图中放置QR控制点的点
        @Override
        public void onQRCodeRead(String text, PointF[] points) {
            //二维码读取回调
            resultTextView.setText(text);
        }

        @Override
        protected void onResume() {
            super.onResume();
            qrCodeReaderView.startCamera();
        }

        @Override
        protected void onPause() {
            super.onPause();
            qrCodeReaderView.stopCamera();
        }
    }

生成二维码图片

/** 
 * 二维码工具类
 * @version 创建时间:2014年12月5日 下午5:15:47 
 */

public class QrCodeUtils {
    
    /**
     * 传入字符串生成二维码
     * @param str
     * @return
     * @throws WriterException
     */
    public static Bitmap Create2DCode(String str) throws WriterException {
        // 生成二维矩阵,编码时指定大小,不要生成了图片以后再进行缩放,这样会模糊导致识别失败
        BitMatrix matrix = new MultiFormatWriter().encode(str,
                BarcodeFormat.QR_CODE, 300, 300);
        int width = matrix.getWidth();
        int height = matrix.getHeight();
        // 二维矩阵转为一维像素数组,也就是一直横着排了
        int[] pixels = new int[width * height];
        for (int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                if (matrix.get(x, y)) {
                    pixels[y * width + x] = 0xff000000;
                }else{
                    pixels[y * width + x] = 0xffffffff;
                }

            }
        }

        Bitmap bitmap = Bitmap.createBitmap(width, height,
                Bitmap.Config.ARGB_8888);
        // 通过像素数组生成bitmap,具体参考api
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
        return bitmap;
    }
}

猜你喜欢

转载自www.cnblogs.com/guanxinjing/p/11950397.html
今日推荐