2012-06-25 47 views
4

我在android 2.3.6 device.Y顯示攝像頭預覽時遇到了問題。我已經使用這段代碼改變攝像頭的方向,但是對於2.3.6而言,它不工作,而對於其他版本,它正在工作正常。android 2.3.6中的攝像頭方向

In device 2.2.1

In device 2.3.6

在設備2.2.1

第一張圖片,在設備2.3.6.I 2圖像要爲設備攝像頭預覽的相同2.2.1 2.3.6.Below是我代碼

if (Integer.parseInt(Build.VERSION.SDK) >= 8) 
      { 
     mCamera.setDisplayOrientation(90); 


     } 
     else 
     { 
      if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
      { 

       p.set("orientation", "portrait"); 
       p.set("rotation", 90); 

      } 
      if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) 
      { 

       p.set("orientation", "landscape"); 
       p.set("rotation", 90); 

      } 
    } 

而且我已經指定了清單中的屏幕方向肖像。一定建議我一個解決方案。提前感謝。

+1

哪個設備是您使用獲得攝像機ID? – jpa

回答

0

請參考下面的代碼:

private void setCameraDisplayOrientation(int cameraId, android.hardware.Camera camera) { 
    int rotation = getWindowManager().getDefaultDisplay() 
      .getRotation(); 
    int degrees = 0; 
    int result; 

    if(Build.VERSION.SDK_INT>10){ 
     android.hardware.Camera.CameraInfo info = 
       new android.hardware.Camera.CameraInfo(); 
     android.hardware.Camera.getCameraInfo(cameraId, info); 
     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; 
     } 

     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); 

    }else{ 
     if(cameraId==CAMERA_FACING_BACK){ 
      camera.setDisplayOrientation(90); 
     }else{ 
      camera.setDisplayOrientation(270); 
     } 
    } 
} 

可以使用

@TargetApi(Build.VERSION_CODES.GINGERBREAD) 
private Camera openFrontFaceCamera() { 
    int cameraCount = 0; 
    Camera cam = null; 
    Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 
    cameraCount = Camera.getNumberOfCameras(); 
    for (int camIdx = 0; camIdx < cameraCount; camIdx++) { 
     Camera.getCameraInfo(camIdx, cameraInfo); 
     if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT ) { 
      try { 
       mCameraId=camIdx; 
       cam = Camera.open(camIdx); 
      } catch (RuntimeException e) { 
       Log.e("Custom Camera", "Camera failed to open: " + e.getLocalizedMessage()); 
      } 
     } 
    } 

    return cam; 
} 

@TargetApi(Build.VERSION_CODES.GINGERBREAD) 
private Camera openRearFaceCamera() { 
    int cameraCount = 0; 
    Camera cam = null; 
    Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 
    cameraCount = Camera.getNumberOfCameras(); 
    for (int camIdx = 0; camIdx < cameraCount; camIdx++) { 
     Camera.getCameraInfo(camIdx, cameraInfo); 
     if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK ) { 
      try { 
       mCameraId=camIdx; 
       cam = Camera.open(camIdx); 
      } catch (RuntimeException e) { 
       Log.e("Custom Camera", "Camera failed to open: " + e.getLocalizedMessage()); 
      } 
     } 
    } 

    return cam; 
}