diff --git a/android/ZBarScannerActivity.java b/android/ZBarScannerActivity.java index 435a929..081764e 100644 --- a/android/ZBarScannerActivity.java +++ b/android/ZBarScannerActivity.java @@ -28,6 +28,8 @@ import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.TextView; import android.content.pm.PackageManager; +import android.view.Surface; + import java.util.ArrayList; import java.util.Collection; @@ -221,7 +223,29 @@ implements SurfaceHolder.Callback { return; } } + private void setCameraDisplayOrientation(Activity activity ,int cameraId) { + android.hardware.Camera.CameraInfo info = + new android.hardware.Camera.CameraInfo(); + android.hardware.Camera.getCameraInfo(cameraId, info); + int rotation = activity.getWindowManager().getDefaultDisplay() + .getRotation(); + int degrees = 0; + switch (rotation) { + case Surface.ROTATION_0: degrees = 0; break; + case Surface.ROTATION_90: degrees = 90; break; + case Surface.ROTATION_180: degrees = 180; break; + case Surface.ROTATION_270: degrees = 270; break; + } + int result; + if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { + result = (info.orientation + degrees) % 360; + result = (360 - result) % 360; // compensate the mirror + } else { // back-facing + result = (info.orientation - degrees + 360) % 360; + } + camera.setDisplayOrientation(result); + } @Override public void onPause () { @@ -500,7 +524,9 @@ implements SurfaceHolder.Callback { break; } // 90 degrees rotation for Portrait orientation Activity. - camera.setDisplayOrientation(rotation); + // camera.setDisplayOrientation(rotation); + setCameraDisplayOrientation(this, 0); + android.hardware.Camera.Parameters camParams = camera.getParameters(); //camParams.setFlashMode(Parameters.FLASH_MODE_TORCH);