Android 超简易Zxing框架 生成二维码+扫码功能

Android Zxing框架 生成二维码+扫码功能

  • 配置
  • 生成二维码
  • 扫码
  • 总结

zxing是一个二维码的框架。

配置

1、
Android 超简易Zxing框架 生成二维码+扫码功能_第1张图片implementation 'com.journeyapps:zxing-android-embedded:4.1.0'
如果报错在这个文件的android下加上如下配置,让其支持Java1.8,不然只有1.7、1.6
(可在'app'右键---->open module settings------>Module看到)

compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

2、
Android 超简易Zxing框架 生成二维码+扫码功能_第2张图片

记得点击Sync Now

生成二维码

步骤:
1、自定义一个负责生成二维码的类,方便调用,返回一个Bitmap

要点:利用Zxing中的 BarcodeEncoderencodeBitmap方法

public Bitmap encodeBitmap(String contents, BarcodeFormat format, int width, int height, Map hints) throws WriterException

encodeBitmap方法

参数 内容
contents 码的内容
format 码的类型(二维码、条形码…)
width 码的宽度
height 码的高度
hints 码的额外参数

Map hints码的额外参数
这里列举了一些常用的
这些都是Zxing中定义好的

参数 内容
EncodeHintType.ERROR_CORRECTION 设置容错率 L>M>Q>H 等级越高扫描时间越长,准确率越高
EncodeHintType.CHARACTER_SET 设置字符集
EncodeHintType.MARGIN 设置边距

QRcode类

package com.example.xianyu;
import android.graphics.Bitmap;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.journeyapps.barcodescanner.BarcodeEncoder;
import java.util.HashMap;
import java.util.Map;

public class  QRcode{
   public Bitmap qrcode(String content){
    int width = 400;
    int height = 400;
       //HashMap设置二维码参数
       Map map = new HashMap();
       //   设置容错率 L>M>Q>H  等级越高扫描时间越长,准确率越高
       map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
       //设置字符集
       map.put(EncodeHintType.CHARACTER_SET,"utf-8");
       //设置外边距
       map.put(EncodeHintType.MARGIN,1);
       //利用编码器,生成二维码
       BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
       Bitmap bitmap = null;
       try {
           bitmap = barcodeEncoder.encodeBitmap(content, BarcodeFormat.QR_CODE, width, height,map);
       } catch (WriterException e) {
           e.printStackTrace();
       }
       return  bitmap;
    }
}

2、在要生成二维码的Activity,调用上述类,输入二维码内容生成二维码,之后显示在ImageView组件上

MainActivity

public class MainActivity extends AppCompatActivity {
 ImageView Code;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Code = findViewById(R.id.iv_code);
        QRcode qrcode = new QRcode();
        Bitmap  bitmap= qrcode.qrcode("CSDN");
        Code.setImageBitmap(bitmap);
        }

成功获得二维码内容
Android 超简易Zxing框架 生成二维码+扫码功能_第3张图片

扫码

步骤:
1、给点击扫码的组件添加点击监听事件

2、在监听事件中,利用IntentstartActivityForResult跳到Zxing定义好的默认的扫码界面CaptureActivity中(也可以自定义扫码界面)

3、重写onActivityResult方法处理二维码返回的内容

要点:
其中的REQUEST_CODEZxing是定义好的,一定要使用这个CODE
不然在onActivityResult方法中解析二维码将会不起作用

IntentIntegrator.parseActivityResult(requestCode, resultCode, data);

这段源码可知REQUEST_CODE要相等才会进行二维码解析,否则将会返回 null

public static IntentResult parseActivityResult(int requestCode, int resultCode, Intent intent) {
        if (requestCode == REQUEST_CODE) {
            return parseActivityResult(resultCode, intent);
        }
        return null;
    }

设置监听:

Code.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
              startActivityForResult(intent,REQUEST_CODE);
          }
      });

重写Activity中的onActivityResult得到二维码内容,我这里只是将获得的内容进行简单的输出

@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null) {
            if(result.getContents() == null) {
                Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show();
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
        }

总结

更多内容请到github查看:https://github.com/zxing/zxing

喜欢Android的可以给我点个关注,不断更新干货

你可能感兴趣的:(Android,android,后端,移动开发,ios,java)