Android 二维码扫描工具 QRCodeReaderView

jopen 5年前

QRCodeReaderView 是基于 ZXING 条形码扫描工具项目改进,为了在肖像模式和增强现实目的下进行更简单的 Android 二维码检测。此项目可以在相机的预览中显示是否有二维码。


  • Create an Activity which implements onQRCodeReadListener, and let implements required methods
  • Make sure Activity orientation is PORTRAIT and give Camera permision in the manifest.xml
  • Add a "QRCodeReaderView" in the layout editor like you actually do with a button for example
 <com.dlazaro66.qrcodereaderview.QRCodeReaderView          android:id="@+id/qrdecoderview"         android:layout_width="match_parent"         android:layout_height="match_parent" />
  • In your onCreate method, you can find the view as usual, using findViewById() function.
  • Set onQRCodeReadListener to the QRCodeReaderView.
  • Start & Stop camera preview in onPause() and onResume() overriden methods.
  • Use onQRCodeReadListener callbacks as you want.
  • You can place widgets or views over QRDecoderView
  public class DecoderActivity extends Activity implements OnQRCodeReadListener {        private TextView myTextView;      private QRCodeReaderView mydecoderview;        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_decoder);            mydecoderview = (QRCodeReaderView) findViewById(;          mydecoderview.setOnQRCodeReadListener(this);            myTextView = (TextView) findViewById(;      }          // Called when a QR is decoded      // "text" : the text encoded in QR      // "points" : points where QR control points are placed      @Override      public void onQRCodeRead(String text, PointF[] points) {          myTextView.setText(text);      }          // Called when your device have no camera      @Override      public void cameraNotFound() {        }        // Called when there's no QR codes in the camera preview image      @Override      public void QRCodeNotFoundOnCamImage() {        }        @Override      protected void onResume() {          super.onResume();          mydecoderview.getCameraManager().startPreview();      }        @Override      protected void onPause() {          super.onPause();          mydecoderview.getCameraManager().stopPreview();      }  }