1.加载静态库和初始化 ImageScanner.
static { System.loadLibrary("iconv"); } // net.sourceforge.zbar.Config mImageScanner = new ImageScanner(); mImageScanner.setConfig(0, Config.X_DENSITY, 3); mImageScanner.setConfig(0, Config.Y_DENSITY, 3);
2.打开Camera设置previewcallback.
try { mCamera.setPreviewDisplay(mSurfaceHolder); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mCamera.setPreviewCallback(previewCallback); mCamera.startPreview();
3.定义previewcallback.
public Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera camera) { // TODO Auto-generated method stub if (!isPass) { Camera.Parameters parameters = camera.getParameters(); Size size = parameters.getPreviewSize(); Image barcode = new Image(size.width, size.height, "Y800"); barcode.setData(data); int result = mImageScanner.scanImage(barcode); if (result != 0) { String mDecodeQRCode = ""; SymbolSet syms = mImageScanner.getResults(); for (Symbol sym : syms) { mDecodeQRCode = sym.getData(); Log.i("W", "HDMI_Decode--> " + mDecodeQRCode); Toast.makeText(MainActivity.this, "QRCode: " + mDecodeQRCode, Toast.LENGTH_SHORT).show(); if (mDecodeQRCode != null && !isPass) { // if (mDecodeQRCode.equals(mCurQR)) { resetCamera(); isPass = true; //playSound(); // } } break; } } } } };
程序需要用到Zbar.jar。