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

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

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、

记得点击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);        }

成功获得二维码内容

扫码

步骤:
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的可以给我点个关注,不断更新干货

更多相关文章

  1. Android(安卓)Studio编码问题
  2. Android(安卓)控件ProgressBar进度条
  3. android 输入法弹出键盘把listview顶上去,保留顶部标题栏位置不动
  4. Android中状态栏的隐藏
  5. android:layout_gravity="bottom"不起作用问题
  6. Android(安卓)List divider显示不出来的问题
  7. Android(安卓)屏幕切换和onConfigurationChanged不调用的原因
  8. 【Android(安卓)Studio】Android(安卓)Studio 安装及设置
  9. Android(安卓)shell 创建 模拟器

随机推荐

  1. Android开发者指南(8) —— What is Andr
  2. EditText的各种属性
  3. Android游戏开发系列教程第五讲(后台服务)
  4. Android兼容性测试GTS-环境搭建、测试执
  5. 设置ScrollView滚动条的颜色
  6. Android(安卓)Studio 简单设置
  7. android的自定义弹出窗
  8. 解决:Failed to fectch URl https://dl-ss
  9. Android基于PinnedSectionListView实现联
  10. Android之UI学习篇七:ImageView实现适屏和