您的位置:首页 > 其它

zxing二维码扫描

2016-04-22 16:52 176 查看


zxing介绍

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




代码很多,官方演示的例子在文件android,一个较为完整的app,导入Android studio,发现少了CameraConfigurationUtils,这个类在文件android-core下。官方效果图:




但是实际开发只需要扫码和生成二维码两个功能就夠了,因此我做了抽离删减,最终我的效果图:




zxing使用


添加依赖

1

compile 'com.google.zxing:core:3.2.1'


扫描二维码

12
3
4

case R.id.qrcode_dencode: //扫描
intent = new Intent(MainActivity.this, CaptureActivity.class);
startActivityForResult(intent, REQUEST_CODE);
break;

12
3
4
5
6
7
8
9

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) { //RESULT_OK = -1Bundle bundle = data.getExtras();
String scanResult = bundle.getString("result");
Toast.makeText(MainActivity.this, scanResult, Toast.LENGTH_LONG).show();
}
}


生成二维码

12
3
4
5
6
7
8
9

case R.id.qrcode_encode: //生成
try {
Bitmap mBitmap = QRCodeEncoder.encodeAsBitmap("http://wuxiaolong.me/", 300);
qrcodeImg.setImageBitmap(mBitmap);

} catch (Exception e) {
e.printStackTrace();
}
break;


识别二维码

12
3
4
5
6
7
8
9
10
11

//长按图片识别二维码
qrcodeImg.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
qrcodeImg.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(qrcodeImg.getDrawingCache());
qrcodeImg.setDrawingCacheEnabled(false);
decodeQRCode(bitmap);
return true;
}
});

12
3
4
5
6
7
8
9
10
1112
13
14
15
16
17
18
19
20
2122
23
24
25
26
27
28
29
30
3132

/**
* 解析二维码图片
*
* @param bitmap   要解析的二维码图片
*/
public final Map<DecodeHintType, Object> HINTS = new EnumMap<>(DecodeHintType.class);

public void decodeQRCode(final Bitmap bitmap) {
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... params) {
try {
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
RGBLuminanceSource source = new RGBLuminanceSource(width, height, pixels);
Result result = new MultiFormatReader().decode(new BinaryBitmap(new HybridBinarizer(source)), HINTS);
return result.getText();
} catch (Exception e) {
return null;
}
}

@Override
protected void onPostExecute(String result) {
Log.d("wxl", "result=" + result);
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
}.execute();

}

由于时间仓促,抽离的代码可能或多或少有些问题,细节待优化。

另外,ViewfinderView自定义属性参考了http://my.oschina.net/smuswc/blog/609413?fromerr=RgSd7WKf


源码

官方的例子和我自己的抽离出的代码都上传github了,地址:https://github.com/WuXiaolong/zxingSample

原文地址:http://www.cnblogs.com/soaringEveryday/p/4607438.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: