1. 程式人生 > >二維碼的簡單實現(Zxing)

二維碼的簡單實現(Zxing)

二維碼的簡單實現(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碼方面基本沒有什麼差異,都能準確快速的接觸碼值。
  1. 匯入依賴
    implementation ‘cn.bingoogolapple:bga-qrcode-zxing:1.3.4’

  2. 嵌入佈局

    <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” />

  3. 寫入程式碼

    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();
            }
        }
    }
    }
    
    1. 輸入許可權
      許可權就是相機許可權 …我這裡怎麼打不出來,就不打了…