不多逼逼,直接上代码
导入依赖
implementation 'com.google.zxing:core:3.3.0'
implementation 'com.journeyapps:zxing-android-embedded:3.5.0'
生成二维码
//用来展示二维码
private ImageView image;
//用于接收生成的bitmap行的二维码
private Bitmap bitmap;
bitmap = QrCodeUtils.createImage(ed_num.getText().toString(), 400, 400, null);
imageView.setImageBitmap(bitmap);
扫描二维码
IntentIntegrator integrator = new IntentIntegrator(MainActivity.this);
integrator.initiateScan();
扫描回调
// 回调操作
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (result != null) {
if (result.getContents() == null) {
Toast.makeText(this, "扫码取消!", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(this, "扫描成功,条码值: " + result.getContents(), Toast.LENGTH_LONG).show();
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
工具类
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.text.TextUtils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.util.Hashtable;
/**
1. 二维码扫描工具类
*/
public class QrCodeUtils {
/**
* 生成二维码图片
*
* @param text
* @param w
* @param h
* @param logo
* @return
*/
public static Bitmap createImage(String text, int w, int h, Bitmap logo) {
if (TextUtils.isEmpty(text)) {
return null;
}
try {
Bitmap scaleLogo = getScaleLogo(logo, w, h);
int offsetX = w / 2;
int offsetY = h / 2;
int scaleWidth = 0;
int scaleHeight = 0;
if (scaleLogo != null) {
scaleWidth = scaleLogo.getWidth();
scaleHeight = scaleLogo.getHeight();
offsetX = (w - scaleWidth) / 2;
offsetY = (h - scaleHeight) / 2;
}
Hashtable<EncodeHintType, Object> hints = new Hashtable<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
//容错级别
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
//设置空白边距的宽度
hints.put(EncodeHintType.MARGIN, 0);
BitMatrix bitMatrix = new QRCodeWriter().encode(text, BarcodeFormat.QR_CODE, w, h, hints);
int[] pixels = new int[w * h];
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
if (x >= offsetX && x < offsetX + scaleWidth && y >= offsetY && y < offsetY + scaleHeight) {
int pixel = scaleLogo.getPixel(x - offsetX, y - offsetY);
if (pixel == 0) {
if (bitMatrix.get(x, y)) {
pixel = 0xff000000;
} else {
pixel = 0xffffffff;
}
}
pixels[y * w + x] = pixel;
} else {
if (bitMatrix.get(x, y)) {
pixels[y * w + x] = 0xff000000;
} else {
pixels[y * w + x] = 0xffffffff;
}
}
}
}
Bitmap bitmap = Bitmap.createBitmap(w, h,
Bitmap.Config.ARGB_8888);
bitmap.setPixels(pixels, 0, w, 0, 0, w, h);
return bitmap;
} catch (WriterException e) {
e.printStackTrace();
}
return null;
}
private static Bitmap getScaleLogo(Bitmap logo, int w, int h) {
if (logo == null) return null;
Matrix matrix = new Matrix();
float scaleFactor = Math.min(w * 1.0f / 5 / logo.getWidth(), h * 1.0f / 5 / logo.getHeight());
matrix.postScale(scaleFactor, scaleFactor);
Bitmap result = Bitmap.createBitmap(logo, 0, 0, logo.getWidth(), logo.getHeight(), matrix, true);
return result;
}
}
设置竖屏扫描
- 新建一个Activity,继承CaptureActivity
import com.journeyapps.barcodescanner.CaptureActivity;
//把setContentView()删掉
public class ScreenErWeiMaActivity extends CaptureActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
- 配置清单文件中的属性
<activity android:name=".ScreenErWeiMaActivity"
android:screenOrientation="portrait"
android:stateNotNeeded="true"
android:theme="@style/zxing_CaptureTheme"
android:windowSoftInputMode="stateAlwaysHidden"/>
3.更改上文扫描二维码的调用时配置
IntentIntegrator integrator = new IntentIntegrator(this);
// 设置要扫描的条码类型,ONE_D_CODE_TYPES:一维码,QR_CODE_TYPES-二维码
integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES);
integrator.setCaptureActivity(ScreenErWeiMaActivity.class);
integrator.setPrompt("请扫描"); //底部的提示文字,设为""可以置空
integrator.setCameraId(0); //前置或者后置摄像头
integrator.setBeepEnabled(false); //扫描成功的「哔哔」声,默认开启
integrator.setBarcodeImageEnabled(true);
integrator.initiateScan();
我是入梦,谢谢你的观看我的博客,如果有什么错误,请随时联系我,QQ:897589417