얼마전 카메라 관련하여 전후방카메라 사용시 , 90도 회전 (세로모드지원)에 관련하여
어플을 디버깅을 하였습니다.
간단한 내용이라 생각했는데 간단하지가 않더군요 일단 2.2 버전이하에서는 전방카메라를
공식적으로 지원해주지를 않아 제조사 API가 있으면 가능한 형태이고
2.3 부터 비로서 전방카메라 지원이 가능하더군요
그리고 카메라가 기본적으로 가로모드라서 세로로 보여지고 싶을때 문제가 발생되었는데
이것도 2.2 이상부터 API 를 지원해주고 그 이하는 안되더군요..^^
그래서 버전별로 코드를 수정해서 사용해야 하는 형태로 어플을 개발하게 되었고
버전에서 지원하지 않으면 무족건 후방카메라를 사용하는 형태로 하였습니다.
소스가 간단하여 금방 알아 차릴 수 있을겁니다.
자세한 내용은 stackoverflow 와 2.3 apiDemos 에 있습니다.~!!
public class CameraSurfaceView extends SurfaceView implements
SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera camera = null;
int numberOfCameras;
int cameraCurrentlyLocked;
int defaultCameraId;
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
int sdkVersion = Integer.parseInt(Build.VERSION.SDK);
if (sdkVersion >= 9) {
// Find the total number of cameras available
numberOfCameras = Camera.getNumberOfCameras();
// Find the ID of the default camera
CameraInfo cameraInfo = new CameraInfo();
for (int i = 0; i < numberOfCameras; i++) {
Camera.getCameraInfo(i, cameraInfo);
if (cameraInfo.facing == CameraInfo.CAMERA_FACING_FRONT) {
defaultCameraId = i;
}
}
camera = Camera.open(defaultCameraId);
camera.setDisplayOrientation(90);
camera.setPreviewDisplay(holder);
} else {
camera = Camera.open();
camera.setDisplayOrientation(90); // 세로모드
camera.setPreviewDisplay(holder);
}
} catch (IOException e) {
}
camera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (camera != null) {
camera.stopPreview();
camera.release();
camera = null;
}
}
PS : 몇일 안남은 올해 마무리 잘하시고 새해 복 많이 받으세요~!!




안드로이드 버전에 따라 회전해야하는 각도가 다릅니다.
디바이스에 따라 회전 각도를 확인 해야 합니다.