现在一维码二维码在我们的日常生活中使用如此的广泛,所以拥有扫码功能的APP变得非常普遍,一个安卓APP需要扫码功能就要用到zxing了,zxing是谷歌开源的让开发者更方便使用摄像头的库,而我们常用的扫码功能就是其中之一。
但是因为zxing的功能太强大了,包含了很多我们用不上的功能,所以一般都会抽取其中的扫码功能单独使用,这个抽取的过程还是有点麻烦的,但是已经有开发者为我们省去了这个过程,直接使用zxing-android-embedded 文件库,来实现扫码功能。
以AndrioSdudio开发环境为例,实现扫码功能,具体操如下:
一、扫描一维码或二维码
新建工程文件
2. 选择Basic Activity模板,也可以选择其它类型模板页,完成新建工程项目。
3.在新建工程建里,打开MainActivity文件。
在MainActivity库里引入:
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
如下图:
4.打开项目中 Build gradle文件
在dependencies 中加入以下代码:
implementation ‘com.journeyapps:zxing-android-embedded:3.5.0@aar’
implementation ‘com.google.zxing:core:3.2.1’
如下图所示:
在res\layout\content_main.xml文件中加入以下代码:
5.在MainActivity文件中,加入相应代码:
private Button buttonscan;
如下图所示:
同时,在onCreate中加入下面代码:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, “Replace with your own action”, Snackbar.LENGTH_LONG)
.setAction(“Action”, null).show();
}
});
//扫描BUTON事件buttonscan.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {IntentIntegrator integrator = new IntentIntegrator(MainActivity.this);integrator = new IntentIntegrator(MainActivity.this);integrator.setPrompt(" "); //底部的提示文字,设为""可以置空integrator.setCameraId(0); //前置或者后置摄像头integrator.setBeepEnabled(false); //扫描成功的「哔哔」声,默认开启integrator.initiateScan();}});
现在可以RUN一下了。
注:如果出现代码中有红色错误提示,程序不能运行。可以通过多编译几下程序,问题如仍未解决,可关闭工程后,重新打开。
如果代码中没有别的错误信息提示,便可出现以下:
点击扫码按钮后,出现横屏扫码界面,如下:
此时可以扫描二维码,但目前还没有得到扫描的结果。
为此,我们加入以下代码,通过 onActivityResult的方法获取 扫描回来的值。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult intentResult = IntentIntegrator.parseActivityResult(requestCode,resultCode,data);
if(intentResult != null) {
if(intentResult.getContents() == null) {
Toast.makeText(this,“内容为空”,Toast.LENGTH_LONG).show();
} else {
// ScanResult 为 获取到的字符串
String ScanResult = intentResult.getContents();
Toast.makeText(this, ScanResult,Toast.LENGTH_LONG).show();
edittext.setText(ScanResult);
}
} else {
super.onActivityResult(requestCode,resultCode,data);
}
}
再次运行程序,通过扫描后,可得到扫码结果,如下图:
以上是扫码全部内容。
如果想有微信竖屏和相关界面,还需要对库中代码做相应改动,请继续看第二部分。