[TOC]
前言
最近在做一些Android组件的编写,扫描二维码是Android中很常用的组件,因此在参考了前人开发经验的基础上对这部分知识进行一个总结,有错误之处还请大神之处,由于会详细介绍封装过程,博文比较长,分成三篇
本次二维码开发是基于zxing-android-embedded这个库的基础上进行开发。这个库是在谷歌zxing库的基础上对一些方法进行了封装,更方便开发者调用。
一、二维码基本功能实现
导入zxing-android-embedded和zxing核心库 由于我使用Android studio开发 因此采用gradle
compile 'com.journeyapps:zxing-android-embedded:3.4.0'
compile 'com.google.zxing:core:3.2.1'
扫码
/**
* 开启扫描界面
*
* @param view
*/
public void start(View view) {
new IntentIntegrator(this)
.setOrientationLocked(false)
.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES)
.setPrompt("将二维码/条码放入框内,即可自动扫描")
.initiateScan(); // 初始化扫描
}
/**
*在onActivityResult中接收扫描结果
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
String result = intentResult.getContents();
}
- 效果()
生成二维码Bitmap
public static Bitmap createQRBitmap(String context) {
Bitmap bitmap = null;
BitMatrix matrix = null;
MultiFormatWriter writer = new MultiFormatWriter();
try {
//设置格式
Map<EncodeHintType, Object> encodeHintTypeMap = new HashMap<>();
//设置二维码边空白的宽度
encodeHintTypeMap.put(EncodeHintType.MARGIN,2);
matrix = writer.encode(context, BarcodeFormat.QR_CODE, 400, 400, encodeHintTypeMap);//400表示生成bitmap大小
BarcodeEncoder encoder = new BarcodeEncoder();
bitmap = encoder.createBitmap(matrix);
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
识别图中二维码
/**
* 识别bitmap中的二维码信息
*
* @param bitmap
* @return
*/
public static Result spotQRcode(Bitmap bitmap) throws FormatException, ChecksumException, NotFoundException {
Result result = null;
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] data = new int[width * height];
bitmap.getPixels(data, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, data);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
QRCodeReader reader = new QRCodeReader();
//result中包含了扫描到的信息,调用 result.getText()可以获取到文本信息
result = reader.decode(binaryBitmap);
return result;
}
- 效果
总结
这篇文章主要讲解了二维码三个基本功能的实现,下一篇将讲解对这些功能的封装优化,如果错误还请指正,感谢。