您的位置:

Android生成二维码的实现

一、Android生成二维码依赖

在进行Android二维码生成之前,我们需要先在build.gradle文件中引入zxing的库文件。可以通过如下方法引入:

dependencies {
    implementation 'com.google.zxing:core:3.3.0'
}

引入后即可在项目中使用zxing库进行二维码生成了。

二、Android生成二维码功能

使用zxing库生成二维码十分简单,只需要传入需要生成二维码的内容以及二维码的尺寸即可,如下所示:

Bitmap bitmap = null;
try {
    bitmap = encodeAsBitmap(content, size, size);
} catch (WriterException e) {
    e.printStackTrace();
}

public static Bitmap encodeAsBitmap(String contents, int width, int height) throws WriterException {
    MultiFormatWriter barcodeWriter = new MultiFormatWriter();
    BitMatrix matrix = null;
    try {
        matrix = barcodeWriter.encode(contents, BarcodeFormat.QR_CODE, width, height);
    } catch (IllegalArgumentException iae) {
        return null;
    }
    int[] pixels = new int[width * height];
    for (int y = 0; y < height; y++) {
        int offset = y * width;
        for (int x = 0; x < width; x++) {
            pixels[offset + x] = matrix.get(x, y) ? BLACK : WHITE;
        }
    }
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    return bitmap;
}

在这里我们使用了zxing库的MultiFormatWriter类生成了二维码,并将结果返回为一个Bitmap对象,可以用于在Android应用中进行显示或者分享。

三、视频生成二维码

在Android应用中,经常需要在播放视频前先进行扫描二维码操作,以保证用户的观看安全性。以下代码展示了如何将视频地址生成为二维码:

Bitmap bitmap = null;
try {
    bitmap = encodeAsBitmap(videoUrl, size, size);
} catch (WriterException e) {
    e.printStackTrace();
}
imageView.setImageBitmap(bitmap);

使用以上方法可以将视频地址生成二维码,并在ImageView中进行展示。

四、如何生成二维码

除了使用zxing库之外,还可以使用Google提供的Barcode Generator API生成二维码。以下是使用该API的示例代码:

private class GenerateQRCode extends AsyncTask {
 
    @Override
    protected Bitmap doInBackground(Object... params) {
        int width = (Integer) params[0];
        int height = (Integer) params[1];
        String qrCodeData = (String) params[2];
        try {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(qrCodeData, BarcodeFormat.QR_CODE, width, height, null);
            int bitMatrixWidth = bitMatrix.getWidth();
            int bitMatrixHeight = bitMatrix.getHeight();
            int[] pixels = new int[bitMatrixWidth * bitMatrixHeight];
            for (int y = 0; y < bitMatrixHeight; y++) {
                int offset = y * bitMatrixWidth;
                for (int x = 0; x < bitMatrixWidth; x++) {
                    pixels[offset + x] = bitMatrix.get(x, y) ? BLACK : WHITE;
                }
            }
            Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_8888);
            bitmap.setPixels(pixels, 0, width, 0, 0, bitMatrixWidth, bitMatrixHeight);
            return bitmap;
        } catch (WriterException e) {
            e.printStackTrace();
            return null;
        }
    }
     
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if(bitmap!=null){
            imageView.setImageBitmap(bitmap);
        }
    }
}

  

以上示例代码中首先使用AsyncTask在后台异步生成二维码,然后在主线程中将其显示在ImageView中。

五、网址生成二维码

在Android应用中我们可以通过WebView或者自定义界面来打开网址,下面是使用WebView和zxing库生成二维码的示例代码:

String url = "https://www.baidu.com";
webView.loadUrl(url);
Bitmap bitmap = null;
try {
    bitmap = encodeAsBitmap(url, size, size);
} catch (WriterException e) {
    e.printStackTrace();
}
imageView.setImageBitmap(bitmap);

以上代码中,使用WebView进行了网页加载,然后使用zxing库生成了对应二维码,并在ImageView中进行展示。

六、链接怎么生成二维码

与网址类似,使用zxing库生成链接对应的二维码也非常简单,示例代码如下:

String link = "https://www.google.com";
Bitmap bitmap = null;
try {
    bitmap = encodeAsBitmap(link, size, size);
} catch (WriterException e) {
    e.printStackTrace();
}
imageView.setImageBitmap(bitmap);

可以看到,生成链接对应的二维码只需要传入链接地址即可。

七、草料二维码生成

除了使用Google提供的Barcode Generator API和zxing库之外,我们还可以使用草料二维码生成器进行二维码生成。以下示例代码展示了如何使用草料二维码生成器生成二维码:

String api = "http://qr.liantu.com/api.php?text=";
String content = "https://www.baidu.com";
String url = api + content;
Bitmap bitmap = null;
try {
    URL imageUrl = new URL(url);
    HttpURLConnection connection = (HttpURLConnection) imageUrl.openConnection();
    connection.setDoInput(true);
    connection.connect();
    InputStream inputStream = connection.getInputStream();
    bitmap = BitmapFactory.decodeStream(inputStream);
} catch (Exception e) {
    e.printStackTrace();
}
imageView.setImageBitmap(bitmap);

在这里我们通过访问草料二维码生成器的接口,传入需要生成二维码的内容,然后获取对应的Bitmap对象进行展示。

八、批量生成二维码

有时我们需要一次性生成多张二维码,以下示例代码展示了如何批量生成二维码:

for (int i = 0; i < contents.size(); i++) {
    String content = contents.get(i);
    int width = 300;
    int height = 300;
    MultiFormatWriter writer = new MultiFormatWriter();
    try {
        BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, width, height);
        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                bitmap.setPixel(x, y, matrix.get(x, y) ? Color.BLACK : Color.WHITE);
            }
        }
        bitmaps.add(bitmap);
    } catch (WriterException e) {
        e.printStackTrace();
    }
}

以上代码中,我们使用了一个for循环对多个内容进行遍历,然后使用zxing库生成对应的二维码并添加到一个List中。

九、小程序怎么生成二维码

小程序生成二维码也可以使用上述的方法进行生成,以下代码展示了如何在小程序中生成二维码:

String appId = "wxXXXXXXXXXXXXXXXX";
String path = "pages/index/index";
String url = "https://api.weixin.qq.com/wxa/getwxacode?access_token=" + getAccessToken();
JSONObject jsonObject = new JSONObject();
jsonObject.put("path", path);
jsonObject.put("width", 430);
Bitmap bitmap = null;
try {
    URL imageUrl = new URL(url);
    HttpURLConnection connection = (HttpURLConnection) imageUrl.openConnection();
    connection.setRequestMethod("POST");
    connection.setDoOutput(true);
    connection.setDoInput(true);
    connection.setUseCaches(false);
    connection.setInstanceFollowRedirects(true);
    connection.setRequestProperty("Content-Type", "application/json");
    connection.setRequestProperty("Accept", "application/json");
    connection.setRequestProperty("charset", "utf-8");
    connection.connect();
    OutputStream outputStream = connection.getOutputStream();
    outputStream.write(jsonObject.toString().getBytes("utf-8"));
    outputStream.flush();
    outputStream.close();
    InputStream inputStream = connection.getInputStream();
    bitmap = BitmapFactory.decodeStream(inputStream);
} catch (Exception e) {
    e.printStackTrace();
}
imageView.setImageBitmap(bitmap);

以上代码中,我们使用了微信的API进行小程序二维码生成,并将获取的Bitmap对象进行展示。

十、核酸检测二维码生成

在疫情防控期间,对于核酸检测的二维码生成需求也十分常见。以下是一个简单的示例代码来生成核酸检测二维码:

String api = "http://qr.liantu.com/api.php?text=";
String content = "https://exp.leziyou.net/survey";
String url = api + content;
Bitmap bitmap = null;
try {
    URL imageUrl = new URL(url);
    HttpURLConnection connection = (HttpURLConnection) imageUrl.openConnection();
    connection.setDoInput(true);
    connection.connect();
    InputStream inputStream = connection.getInputStream();
    bitmap = BitmapFactory.decodeStream(inputStream);
} catch (Exception e) {
    e.printStackTrace();
}
imageView.setImageBitmap(bitmap);

在这里我们使用了草料二维码生成器的接口来生成核酸检测对应的二维码。