package jp.mydns.sys1yagi.android.zxingsample; import java.util.List; import android.app.Activity; import android.content.Intent; import android.content.res.Configuration; import android.hardware.Camera; import android.hardware.Camera.AutoFocusCallback; import android.hardware.Camera.PreviewCallback; import android.net.Uri; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.view.WindowManager; import android.widget.Toast; import com.google.zxing.BinaryBitmap; import com.google.zxing.PlanarYUVLuminanceSource; import com.google.zxing.Reader; import com.google.zxing.Result; import com.google.zxing.common.HybridBinarizer; import com.google.zxing.qrcode.QRCodeReader; public class BarcodeScanCameraActivity extends Activity implements OnClickListener, AutoFocusCallback { private SurfaceView mSurfaceView; private Camera mCamera; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); mSurfaceView = new SurfaceView(this); mSurfaceView.setOnClickListener(this); setContentView(mSurfaceView); } @Override protected void onResume() { super.onResume(); SurfaceHolder holder = mSurfaceView.getHolder(); holder.addCallback(callback); } protected boolean isPortrait() { return (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT); } private SurfaceHolder.Callback callback = new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { mCamera = Camera.open(); try { mCamera.setPreviewDisplay(holder); } catch (Exception e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Camera.Parameters parameters = mCamera.getParameters(); List<Camera.Size> previewSizes = parameters .getSupportedPreviewSizes(); Camera.Size previewSize = previewSizes.get(0); parameters.setPreviewSize(previewSize.width, previewSize.height); if (isPortrait()) { mCamera.setDisplayOrientation(90); } else { mCamera.setDisplayOrientation(0); } mCamera.setParameters(parameters); mCamera.startPreview(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { mCamera.release(); mCamera = null; } }; @Override public void onClick(View v) { if (mCamera != null) { mCamera.autoFocus(this); } } @Override public void onAutoFocus(boolean success, Camera camera) { if (success) { camera.setOneShotPreviewCallback(mPreviewCallback); } } private PreviewCallback mPreviewCallback = new PreviewCallback() { @Override public void onPreviewFrame(byte[] data, Camera camera) { int previewWidth = camera.getParameters().getPreviewSize().width; int previewHeight = camera.getParameters().getPreviewSize().height; PlanarYUVLuminanceSource source = new PlanarYUVLuminanceSource( data, previewWidth, previewHeight, 0, 0, previewWidth, previewHeight, false); BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source)); Reader reader = new QRCodeReader(); try { Result result = reader.decode(bitmap); String text = result.getText(); Intent intent = new Intent(); intent.setData(Uri.parse(text)); setResult(RESULT_OK, intent); finish(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(getApplicationContext(), "Not Found", Toast.LENGTH_SHORT).show(); } } }; }