一、引用依赖
1、zxing 生成二维码的依赖
implementation 'com.google.zxing:core:3.3.3'
implementation 'com.journeyapps:zxing-android-embedded:3.6.0'
2、zxing 扫码二维码依赖
implementation 'pub.devrel:easypermissions:1.0.1'
implementation 'cn.bingoogolapple:bga-photopicker:1.2.8@aar'
implementation 'cn.bingoogolapple:bga-baseadapter:1.2.9@aar'
implementation 'cn.bingoogolapple:bga-flowlayout:1.0.0@aar'
implementation 'com.github.bumptech.glide:glide:4.7.1'
// scanningCode
implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.3.7'
3、AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA"/><!-- 摄像头权限 -->
二、使用方法
1、 不带有logo的二维码
String result = null;
String content = "你好,世界!";
try {
// 将中文UTF-8转换成ISO-8859-1(避免中文变问号)
result = new String(content.getBytes("UTF-8"),"iso-8859-1");
Bitmap qrCode = ZxingUtils.createQRCode(result,200);
// img为ImageView视图
img.setImageBitmap(qrCode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
样例:
2、带有log的二维码
String content = "你好,世界!";
// Bitmap 获取mipmap文件夹资源
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.mipmap.test);
Bitmap qrCode = ZxingUtils.createQRCode(content,200,bmp);
// img为ImageView视图
img.setImageBitmap(qrCode);
样例:
三、扫码功能(二维码、条形码都可以扫描)
创建activity_scan.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
tools:context=".ScanActivity">
<cn.bingoogolapple.qrcode.zxing.ZXingView
android:id="@+id/zxing_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
创建ScanActivity.java
package com.chy.demoxing;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import cn.bingoogolapple.qrcode.core.QRCodeView;
import cn.bingoogolapple.qrcode.zxing.ZXingView;
public class ScanActivity extends AppCompatActivity implements QRCodeView.Delegate {
private ZXingView mZxingView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan);
mZxingView = findViewById(R.id.zxing_view);
mZxingView.setDelegate(this);
}
@Override
protected void onStart() {
super.onStart();
mZxingView.startCamera();// 打开后置摄像头开始预览,但是并未开始识别
//mZxingView.startCamera(Camera.CameraInfo.CAMERA_FACING_FRONT);// 打开前置摄像头开始预览,但是并未开始识别
//mZxingView.startSpot();// 开始识别
mZxingView.startSpotAndShowRect();// 显示扫描框,并开始识别
}
@Override
protected void onStop() {
super.onStop();
mZxingView.stopCamera();// 关闭摄像头预览,并隐藏扫描框
}
@Override
public void onScanQRCodeSuccess(String result) {
Toast.makeText(getBaseContext(),"扫描结果为:"+result,Toast.LENGTH_SHORT).show();
mZxingView.stopSpot();// 停止识别
finish();
}
@Override
public void onCameraAmbientBrightnessChanged(boolean isDark) {
Log.d("IS_DARK",String.valueOf(isDark));
}
@Override
public void onScanQRCodeOpenCameraError() {
Toast.makeText(getBaseContext(),"ERROR",Toast.LENGTH_SHORT).show();
mZxingView.stopSpot();// 停止识别
finish();
}
}
样例:
备注 :
mZxingView.startCamera();// 打开后置摄像头开始预览,但是并未开始识别
mZxingView.stopCamera();// 关闭摄像头预览,并隐藏扫描框
mZxingView.startSpot();// 开始识别
mZxingView.stopSpot();// 停止识别
mZxingView.startSpotAndShowRect();// 显示扫描框,并开始识别
mZxingView.stopSpotAndHiddenRect();// 停止识别,并隐藏扫描框
mZxingView.showScanRect();// 显示扫描框
mZxingView.hiddenScanRect();// 隐藏扫描框
mZxingView.getScanBoxView().setOnlyDecodeScanBoxArea(true);// 仅识别扫描框中码