Android利⽤zxing⽤相机扫描识别⼆维码(添加闪光灯和本地
⼆维码)超详细教程
之前写了怎么⽤zxing的jar包进⾏简单的
接下来单独说说怎么⽤相机扫描⼆维码,⽤相机扫描⼆维码相对于前⾯的⽣成⼆维码,识别⼆维码来说要⿇烦⼀点,⽹上的教程太多,要么太简单,要么说得不清楚,来写写我的,⼀是⽅便⼤家学习,⽽是⽅便⾃⼰复习。
(1)下载
然后这是我修改过的别⼈的,接下来教程都是以我修改过的为准:
如果访问GitHub较慢也可以直接在CSDN下载:
(2)粘贴ing包
在下载好的java⽂件夹⾥⾯到ing包,复制,如图
打开⾃⼰的项⽬,右键点击java,选择粘贴,注意⼀定要粘贴在⾃⼰的main⽂件夹⾥⾯,不要粘贴到了test⾥⾯。包的名字也要是ing,不然会报错。
民兵葛二蛋演员
然后打开会发现这4个JAVA⽂件会出错,原因是R包和⾃⼰的包不⼀样(注意看我ing后⾯的括号⾥跟了个test,原因是我不⼩⼼粘贴到test⽂件夹⾥⾯了,后来调试的时候出错了,正常的粘贴到main⾥⾯是没有test的,⼀定要注意)
修改⽅法就是打开这四个⽂件,import⾃⼰的R包,格式如图:
(3)粘贴源⽂件
两个layout:activity_scanner,scanner_toolbar
⼀个raw⽂件声⾳
values⾥⾯的attrs,colors,ids,strings,如果有⾃⼰的内容的话注意不要覆盖了。
(4)配置权限等
在app下的adle⾥⾯添加  compile 'ing:core:3.3.0'      如图:
然后在manifest⾥⾯申请权限:
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>    <uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
以及声明CaptureActivity
<activity android:name="ing.activity.CaptureActivity"/>
(5)测试运⾏
刘伊心走光在MainActivity⾥⾯import进CaptureActivity
le.zxing.activity.CaptureActivity;
然后button监听⾥⾯:
Button toscan=(Button)findViewById(_scan);
toscan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {海南三亚旅行社
Intent intent=new Intent();
intent.setClass(MainActivity.this,CaptureActivity.class);
startActivity(intent);
}
});
然后看效果:
点击button————————————出现扫描页⾯————————————扫描结果
可以看到在这⾥我⾃⼰⼜添加了⼀个闪光灯按钮和右上⾓的从相册获取图⽚按钮,看看效果
(6)show me the code:
主要的改动就是在CaptureActivity⾥⾯
handleDecode函数⽤于处理相机扫描得来的⼆维码,zxing⾥⾯已经写得很完全了,我在这⾥设置了个对话框,使扫描出来的内容直接显⽰出来
/**
* 这⾥是⽤相机扫描的处理⽅法
*/
public void handleDecode(Result result, Bitmap barcode) {金圣叹
playBeepSoundAndVibrate();
final String resultString = Text();
if (TextUtils.isEmpty(resultString)) {
Toast.makeText(CaptureActivity.this, "Scan failed!", Toast.LENGTH_SHORT).show();
} else {
//对话框
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("扫描结果:")//设置对话框的标题
.setMessage(resultString)//设置对话框的内容
//设置对话框的按钮
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
})
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
}).create();
dialog.setCanceledOnTouchOutside(false);//点击其他地⽅对话框不消失
dialog.show();
}
}
西湖龙井冲泡方法然后是从相册⾥⾯导⼊⼆维码:
open_picture⽅法:
//打开图⽚
private void open_picture(){
Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT);
innerIntent.setType("image/*");
Intent wrapperIntent = ateChooser(innerIntent, "请选择⼆维码图⽚");
CaptureActivity.this.startActivityForResult(wrapperIntent, REQUEST_CODE_SCAN_GALLERY);
}自动挡汽车驾驶技巧
这是系统⾃带的onActivityResult⽅法,我做了⼀些改动。
onActivityResult的主要思路就是到这个⽂件的路径,然后根据这个路径到⽂件进⾏解析。