二维码Zxing&Zbar
二维码Zxing&Zbar
前言:该项目主要介绍了二维码扫描、闪光灯开启、本地二维码图片识别、二维码生成。分别是zxing和zbar(网格二维码)分别实现,具体效果运行项目apk...
开发环境:AndroidStudio2.2.1+gradle-2.14.1
涉及知识:
1.Zxing和Zbar(网格)二维码扫描
2.闪光灯开启与关闭
3.本地二维码识别
4.二维码生成
5.Handler机制
6.butterknife注解式开发
引入依赖:
compile 'com.android.support:appcompat-v7:22.+'
compile 'com.google.zxing:core:3.2.1'
compile 'com.jakewharton:butterknife:7.0.1'
compile files('libs/zbar.jar')
部分代码:
/**
* Zbar二维码扫描+闪光灯+本地二维码识别
*/
public class ZbarActivity extends AppCompatActivity implements QRCodeView.Delegate { @Bind(R.id.zbarview)
ZBarView mQRCodeView; @Bind(R.id.scancode_lamplight)
ToggleButton toggleButton; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.zbartest_scan_layout);
ButterKnife.bind(this);
initLayout();
} private void initLayout() {
mQRCodeView.setDelegate(this);
mQRCodeView.startSpotAndShowRect();//显示扫描框,并且延迟1.5秒后开始识别
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
mQRCodeView.openFlashlight();
} else {
mQRCodeView.closeFlashlight();
}
}
});
} @OnClick({R.id.line_back, R.id.scancode_localimg})
protected void onClickBtn(View view) {
switch (view.getId()) {
case R.id.line_back:
finish();
break;
case R.id.scancode_localimg:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 0x11);
break;
default:
break;
}
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 0x11) {
Uri uri = data.getData();
String path = null;
if (!TextUtils.isEmpty(uri.getAuthority())) {
Cursor cursor = getContentResolver().query(uri,
new String[]{MediaStore.Images.Media.DATA}, null, null, null);
if (null == cursor) {
Toast.makeText(ZbarActivity.this, "图片没找到", Toast.LENGTH_SHORT).show();
return;
}
cursor.moveToFirst();
path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
cursor.close();
} else {
path = uri.getPath();
}
if (null != path) {
codeDiscriminate(path);
} else {
Toast.makeText(ZbarActivity.this, "图片路径为空", Toast.LENGTH_SHORT).show();
return;
}
}
} @Override
protected void onRestart() {
mQRCodeView.startCamera();
super.onRestart();
} @Override
public void onResume() {
super.onResume();
mQRCodeView.startSpotAndShowRect();//显示扫描框,并且延迟1.5秒后开始识别
} @Override
protected void onStop() {
mQRCodeView.stopCamera();
// mQRCodeView.closeFlashlight();
super.onStop();
} private void vibrate() {
Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(200);
} private void codeDiscriminate(final String path) {
new Thread(new Runnable() { @Override
public void run() {
Looper.prepare();
String result = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
result = QRCodeDecoder.syncDecodeQRCode(path);
} else {
result = QRCodeDecoder.syncDecodeQRCode2(path);
}
Log.i("zbar_result", Build.VERSION.SDK_INT + "--->" + result);
Message msg = mHandler.obtainMessage();
//封装消息id
msg.what = 1;//作为标示,便于接收消息
msg.obj = result;
mHandler.sendMessage(msg);//发送消息
}
}).start();
} //创建一个Hander局部类对象,通过handleMessage()钩子方法来更新UI控件
Handler mHandler = new Handler() { public void handleMessage(Message msg) {
//得到封装消息的id进行匹配
if (1 == msg.what) {
if (null != msg.obj)
onScanQRCodeSuccess(msg.obj.toString());
}
} }; @Override
protected void onDestroy() {
mQRCodeView.onDestroy();
ButterKnife.unbind(this);
super.onDestroy(); } @Override
public void onScanQRCodeSuccess(String result) {
Log.i("zbar_result", "result:" + result);
Toast.makeText(this, "二维码的数据:" + result, Toast.LENGTH_SHORT).show();
vibrate();
mQRCodeView.startSpot();
} @Override
public void onScanQRCodeOpenCameraError() {
Log.e("zbar_result", "打开相机出错");
Toast.makeText(this, "打开相机出错", Toast.LENGTH_SHORT).show();
} }
二维码Zxing&Zbar的更多相关文章
- 二维码zxing源码分析(五)精简代码
由于工作的需要,我并不是需要二维码扫描的所有的功能,我只是需要扫一扫,并显示出来图片和url就行,于是我们就要精简代码了,源码已经分析完了,精简起来就方便多了,源码分析请看 二维码zxing源码分析( ...
- Android快速实现二维码扫描--Zbar
Android中二维码扫描的最常用库是zxing和zbar,上一篇<Android快速实现二维码扫描–Zxing>介绍了Zxing.这次说Zbar,Zbar速度极快,我就比较常用,项目地址 ...
- winform生成条形码和二维码(ZXing.Net)
首先在项目添加ZXing.Net. 工具-->Nuget包管理器-->Nuget程序包 在所搜栏输入 ZXing.Net 如下图: 添加完成后会看见: 效果图: 所有代码: /// &l ...
- 二维码解码器Zbar+VS2012开发环境配置
Zbar条码解码器是一个开源的二维码(包括条形码)解码器,可以识别来至于视频流,图像文件.手持扫码器和视频设备(如摄像头)等二维码识别,支持EAN-13/UPC-A, UPC-E, EAN-8, Co ...
- 框架学习八:二维码(Zxing)
本文转自夏神:http://blog.csdn.net/xiaanming/article/details/10163203 一.用什么 二维码扫描用的google的开源框架Zxing. 二.下载 地 ...
- 二维码zxing源码分析(四)wifi部分
前三个部分的地址是:ZXING源码分析(一)CAMERA部分 . zxing源码分析(二)decode部分.zxing源码分析(三)result.history部分 前面三篇文章基本上已经把zxin ...
- 二维码zxing源码分析(二)decode部分
在上一篇博客中分析了zxing怎么打开摄像头,并且扫描结果,那么扫描之后的数据呢,是不是就要解析了呢,那我们看一下zxing怎么解析这个数据的. 上一篇博客地址ZXING源码 ...
- 二维码zxing源码分析(一)camera部分
首先,我们先把zxing的源代码给下载下来,这个网上有很多,我下载的是2.3的,不得不说这个谷歌提供的包包含的功能还是很全面的. 我把下载的包解压后,找到android文件夹,导入到ecpli ...
- java zxing实现二维码生成和解析zxing实现二维码生成和解析
原文:https://www.cnblogs.com/zhangzhen894095789/p/6623041.html zxing实现二维码生成和解析 二维码 zxing 二维码的生成与解析 ...
随机推荐
- POJ_3268 Silver Cow Party 【最短路】
一.题面 POJ3268 二.分析 该题的意思就是给定了一个由每个节点代表农场的有向图,选定一个农场X办party,其余农场的都要去,每个农场的cow都走最短路,走的时间最久的cow耗时多少. 了解题 ...
- 微信小程序,全局变量方法的使用
方法一:app.js 内设置全局变量(如屏宽,屏高的设置) 1.app.js文件,定义全局变量 /定义全局变量 globalData:{ userInfo:null, sysInfo:null, wi ...
- kafka监控服务搭建
wget https://github.com/Morningstar/kafka-offset-monitor/releases/download/0.4.1/KafkaOffsetMonitor- ...
- gps数据上传防止android系统休眠
最近在做关于android手机端gps定时定位的功能,需要每隔几秒钟将gps定位获取的经纬度上传至后台,但是发现某些手机在屏幕黑屏,进入休眠状态后,后台就没有收到定位信息了,后来通过网上查找资料,发现 ...
- Python中socket经ssl加密后server开多线程
前几天手撸Python socket代码,撸完之后经过ssl加密,确保数据的安全,外加server端开启多线程保证一个客户端连接有一个线程来服务客户端,走了不少的弯路,网上的信息啥的要 ...
- checkbox 框 选中判断
function checkAll(checktop){ $(":checkbox[name='id']").prop("checked",checktop.c ...
- MVC目录规范
入口程序 单一入口机制,单一入口指在一个web应用程序中,所有的请求都是指向一个脚本文件,例如我们经常看到某一个网站所有的页面都是index.php??xxxx这样的形式.所有对使用程序的访问都是必须 ...
- document.documentElement和document.body 与document.compatMode的关系
首先我们看看document.compatMode(兼容模式): document.compatMode它有两种可能的返回值:BackCompat和CSS1Compat, document.compa ...
- python输出不换行
python输出不换行 Python2的写法是: print 'hello', Python3的写法是: print('hello', end='') 对于python2和python3都兼容的写法是 ...
- Android下so注入和hook
一.前言 总结一下这两天学习的Android注入so文件,通过遍历got表hook函数调用 1.注入so文件 2.so文件中遍历got表hook函数 二.注入so文件 1)注入进程 1.编程思路分为以 ...