二维码的简单实现(ZXing)
继续之前的二维码实现方式的第二种:
先补一下这两者的区别
1.zxing支持更多的码制:datamatix、PDF417、等,zbar不能很好支持PDF417(但是在源码中有对于Pdf417码处理)。
2.zxing的执行解码效率低于zbar,从耗费内存空间角度看,zbar更适合嵌入式设备开发,大部分手机app的解码采用的是zxing,因为zxing当初就是面向android开发的。
3.zbar和zxing 两者都不能 很好的支持 条码扫描,在摄像头分辨率低,目标条码打印在曲面上或者目标条码密集或扫描角度非垂直的情况下,很难识别,且条码扫描会产生误读,这种致命缺点致使激光扫描头任然为条码识读领域的工业级设备。
4.zxing在解码运算中执行的浮点运算非常耗时,一般不支持浮点运算的CPU在做图像处理方面会严重延时,我曾将zxing中的图像转换部分浮点转整形后导致扫描PDF417图形结果错误。
5.两者在扫描QR码方面基本没有什么差异,都能准确快速的接触码值。
-
导入依赖
implementation ‘cn.bingoogolapple:bga-qrcode-zxing:1.3.4’ -
嵌入布局
<cn.bingoogolapple.qrcode.zxing.ZXingView
android:id="@+id/zxingview"
android:layout_width=“100dp”
android:layout_height=“100dp”
app:qrcv_animTime=“1000”
app:qrcv_borderColor="@android:color/white"
app:qrcv_borderSize=“1dp”
app:qrcv_cornerColor="@color/colorPrimaryDark"
app:qrcv_cornerLength=“20dp”
app:qrcv_cornerSize=“3dp”
app:qrcv_maskColor="#33FFFFFF"
app:qrcv_rectWidth=“200dp”
app:qrcv_scanLineColor="@color/colorPrimaryDark"
app:qrcv_scanLineSize=“1dp”
app:qrcv_topOffset=“90dp” /> -
写入代码
public class MainActivity extends AppCompatActivity implements QRCodeView.Delegate { private ZXingView mZxingview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化 initView(); } private void initView() { mZxingview = findViewById(R.id.zxingview); mZxingview.setDelegate(this); //动态权限 String[] p = new String[]{Manifest.permission.CAMERA}; ActivityCompat.requestPermissions(MainActivity.this, p, 1); } @Override public void onScanQRCodeSuccess(String result) { Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show(); } @Override public void onCameraAmbientBrightnessChanged(boolean isDark) { } @Override public void onScanQRCodeOpenCameraError() { } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (grantResults.length > 0) { int result = grantResults[0]; if (result == PackageManager.PERMISSION_GRANTED) { //权限同意 mZxingview.startSpot(); } else { //权限拒绝 Toast.makeText(MainActivity.this, "请同意打开摄像头权限", Toast.LENGTH_SHORT).show(); } } } }
- 输入权限
权限就是相机权限 …我这里怎么打不出来,就不打了…
- 输入权限