由于页面是与H5交互完成的,所有需要客户端根据返回的URL,转换为一个Base64格式的字符串返回给H5端。
所以,我们需要借助Google的zxing工具包:
在app的build.gradle下添加依赖:
compile 'com.google.zxing:core:3.3.0'
1.封装一个生成二维码的工具类,构建creareQRImage方法,只需要传入一个url:
public static Bitmap createQRImage(String url,final int width, final int height ) { try { // 判断URL合法性 if (url == null || "".equals(url) || url.length() < 1) { return null; } Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); hints.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 图像数据转换,使用了矩阵转换 BitMatrix bitMatrix = new QRCodeWriter().encode(url, BarcodeFormat.QR_CODE, width, height, hints); int[] pixels = new int[width * height]; // 下面这里按照二维码的算法,逐个生成二维码的图片, // 两个for循环是图片横列扫描的结果 for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (bitMatrix.get(x, y)) { pixels[y * width + x] = 0xff000000; } else { pixels[y * width + x] = 0xffffffff; } } } // 生成二维码图片的格式,使用ARGB_8888 Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.setPixels(pixels, 0, width, 0, 0, width, height); return bitmap; } catch (WriterException e) { e.printStackTrace(); } return null; }
2.根据bitmap转换成base64:
public static String bitmapToBase64(Bitmap bitmap) { String result = null; ByteArrayOutputStream baos = null; try { if (bitmap != null) { baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); baos.flush(); baos.close(); byte[] bitmapBytes = baos.toByteArray(); result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (baos != null) { baos.flush(); baos.close(); } } catch (IOException e) { e.printStackTrace(); } } return result; }
3.调用工具类:
Bitmap ubm= QRUtil.createQRImage(getQRinfo,350,350); String bResult=CommentUtils.bitmapToBase64(ubm); String msg="data:image/png;base64,"+bResult;
LogUtil.i("base64---"+msg);注意:传个H5的时候要加上前缀。