summaryrefslogtreecommitdiffstats
path: root/android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraTestActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraTestActivity.java')
-rw-r--r--android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraTestActivity.java155
1 files changed, 155 insertions, 0 deletions
diff --git a/android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraTestActivity.java b/android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraTestActivity.java
new file mode 100644
index 0000000..e20bcad
--- /dev/null
+++ b/android/examples/CameraTest/src/net/sourceforge/zbar/android/CameraTest/CameraTestActivity.java
@@ -0,0 +1,155 @@
+/*
+ * Basic no frills app which integrates the ZBar barcode scanner with
+ * the camera.
+ *
+ * Created by lisah0 on 2012-02-24
+ */
+package net.sourceforge.zbar.android.CameraTest;
+
+import net.sourceforge.zbar.android.CameraTest.CameraPreview;
+
+import android.app.Activity;
+import android.content.pm.ActivityInfo;
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.Log;
+
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.Window;
+import android.widget.FrameLayout;
+import android.widget.Button;
+
+import android.hardware.Camera;
+import android.hardware.Camera.PreviewCallback;
+import android.hardware.Camera.AutoFocusCallback;
+import android.hardware.Camera.Parameters;
+import android.hardware.Camera.Size;
+
+import android.widget.TextView;
+import android.graphics.ImageFormat;
+
+/* Import ZBar Class files */
+import net.sourceforge.zbar.ImageScanner;
+import net.sourceforge.zbar.Image;
+import net.sourceforge.zbar.Symbol;
+import net.sourceforge.zbar.SymbolSet;
+import net.sourceforge.zbar.Config;
+
+public class CameraTestActivity extends Activity
+{
+ private Camera mCamera;
+ private CameraPreview mPreview;
+ private Handler autoFocusHandler;
+
+ TextView scanText;
+ Button scanButton;
+
+ ImageScanner scanner;
+
+ private boolean barcodeScanned = false;
+ private boolean previewing = true;
+
+ static {
+ System.loadLibrary("iconv");
+ }
+
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.main);
+
+ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+
+ autoFocusHandler = new Handler();
+ mCamera = getCameraInstance();
+
+ /* Instance barcode scanner */
+ scanner = new ImageScanner();
+ scanner.setConfig(0, Config.X_DENSITY, 3);
+ scanner.setConfig(0, Config.Y_DENSITY, 3);
+
+ mPreview = new CameraPreview(this, mCamera, previewCb, autoFocusCB);
+ FrameLayout preview = (FrameLayout)findViewById(R.id.cameraPreview);
+ preview.addView(mPreview);
+
+ scanText = (TextView)findViewById(R.id.scanText);
+
+ scanButton = (Button)findViewById(R.id.ScanButton);
+
+ scanButton.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ if (barcodeScanned) {
+ barcodeScanned = false;
+ scanText.setText("Scanning...");
+ mCamera.setPreviewCallback(previewCb);
+ mCamera.startPreview();
+ previewing = true;
+ mCamera.autoFocus(autoFocusCB);
+ }
+ }
+ });
+ }
+
+ public void onPause() {
+ super.onPause();
+ releaseCamera();
+ }
+
+ /** A safe way to get an instance of the Camera object. */
+ public static Camera getCameraInstance(){
+ Camera c = null;
+ try {
+ c = Camera.open();
+ } catch (Exception e){
+ }
+ return c;
+ }
+
+ private void releaseCamera() {
+ if (mCamera != null) {
+ previewing = false;
+ mCamera.setPreviewCallback(null);
+ mCamera.release();
+ mCamera = null;
+ }
+ }
+
+ private Runnable doAutoFocus = new Runnable() {
+ public void run() {
+ if (previewing)
+ mCamera.autoFocus(autoFocusCB);
+ }
+ };
+
+ PreviewCallback previewCb = new PreviewCallback() {
+ public void onPreviewFrame(byte[] data, Camera camera) {
+ Camera.Parameters parameters = camera.getParameters();
+ Size size = parameters.getPreviewSize();
+
+ Image barcode = new Image(size.width, size.height, "Y800");
+ barcode.setData(data);
+
+ int result = scanner.scanImage(barcode);
+
+ if (result != 0) {
+ previewing = false;
+ mCamera.setPreviewCallback(null);
+ mCamera.stopPreview();
+
+ SymbolSet syms = scanner.getResults();
+ for (Symbol sym : syms) {
+ scanText.setText("barcode result " + sym.getData());
+ barcodeScanned = true;
+ }
+ }
+ }
+ };
+
+ // Mimic continuous auto-focusing
+ AutoFocusCallback autoFocusCB = new AutoFocusCallback() {
+ public void onAutoFocus(boolean success, Camera camera) {
+ autoFocusHandler.postDelayed(doAutoFocus, 1000);
+ }
+ };
+}