使用zxing实现二维码的生成和扫描

1.导入core-3.1.0.jar包
2.将zxing包直接导入项目中
3.导入raw下的baidu_beep.ogg
4.导入values下的资源
5.添加相关权限
6.生成二维码

<!--二维码扫码-->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.FLASHLIGHT" /><uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.change_network_state" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    /**
     * 根据内容生成二维码bitmap
     *
     * @param content
     * @return
     */
    public  static Bitmap generateQRCode(String content,Context context) {
        if (TextUtils.isEmpty(content)) {
            return null;
        }
        try {
            QRCodeWriter writer = new QRCodeWriter();
            // MultiFormatWriter writer = new MultiFormatWriter();
            BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, UtilMethod.dip2px(context, 400), UtilMethod.dip2px(context, 400));
            return bitMatrix2Bitmap(matrix);
        } catch (WriterException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 生成bitmap
     *
     * @param matrix
     * @return
     */
    public  static 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;
    }

7.开启扫描
首先要在xml中配置

     // 打开扫描界面扫描条形码或二维码
        Intent openCameraIntent = new Intent(getmActivity(),
                CaptureActivity.class);
        startActivityForResult(openCameraIntent, 0);

在CaptureActivity类中的
 /**
     * 解析结果处理
     */
    public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor) {
        inactivityTimer.onActivity();
        beepManager.playBeepSoundAndVibrate();

        String msg = rawResult.getText();
        System.out.println("--------------Result:" + msg);
        if (msg == null || "".equals(msg)) {
            msg = "";
        }
        if (msg.equals("")) {//无法识别
            Toast.makeText(CaptureActivity.this, R.string.not_scan,
                    Toast.LENGTH_SHORT).show();
        } else {
             //识别成功
            Intent resultIntent = new Intent();

            resultIntent.putExtra("result", msg);
            this.setResult(RESULT_OK, resultIntent);
        }
        finish();

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值