Zxing3.x的使用
这几天是小假期,本来想去出去转转,放假之前突然发现了一本书,试读了两页,发现受益匪浅,果断不出去了,在家研读,可惜是适度版的,只能看前几十页,今天上午就看完了,下午下了订单,希望明天能到,下午没啥事,整理了一下以前的资料,分享一下Zxing吧。
Zxing相信大家都很熟悉了,又是google出的,实现二维码的生成,解析。当初提需求的时候,领导让用最新的版本,网上的资料基本上都是2.x的,甚至看到1.6版的被转来转去,当时只能自己慢慢看,还好官方有DEMO,大致上读了一下,虽然他们做了国际化,但是还是不太友好,只能自己一点点读了。
源码怎么获取呢,zxing官方是用maven管理的,如果你想从官网下载代码,需要先配置maven的环境,只是浪费一点时间,没什么难度,需要注意的一点是,当初用3.3的时候,怎么编译也不过,之后翻墙看了一圈,看到那些老外都在用3.1的,突发奇想用3.1编译,果然过了。maven第一次运行的时候,会下载好多文件,记得当时没挂代理,到是也能用,就是很耗时。以后会快很多。源码下好了,代码有很多个工程,找到你编译器对应的,导入,官方demo的zing,基本实现了二维码的生成,解析,不过是通过startActivityForResult的方法,判断flag来解读,直接找关键方法。
把zing当做子工程直接引用。先说生成二维码:核心类是QRCodeEncoder,上代码:
private void initCode() {
WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
Point displaySize = new Point();
display.getSize(displaySize);
int width = displaySize.x;
int height = displaySize.y;
int smallerDimension = width < height ? width : height;
smallerDimension = smallerDimension * 7 / 8;
Intent intent = getIntent();
if (intent == null) {
return;
}
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT,code);
try {
boolean useVCard = intent.getBooleanExtra(USE_VCARD_KEY, false);
qrCodeEncoder = new QRCodeEncoder(this, intent, smallerDimension, useVCard);
Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
if (bitmap == null) {
qrCodeEncoder = null;
return;
}
two_dimen_value.setImageBitmap(bitmap);
} catch (WriterException e) {
qrCodeEncoder = null;
}
}
首先获取屏幕的大小,自动适配屏幕,two_dimen_value是一个imageview,如果觉得不够严谨,如果觉得不够严谨,可以将二维码保存到SD卡,每次用直接读取,更新的话覆盖文件即可。