마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

전면카메라를 사용하다 후면카메라를 사용하면 문제가 있나요?

0 추천

전면카메라를 사용하는 어플을 만들었는데 사용중 홈키를 누르거나 취소키로 어플을 종료하고 기본카메라어플을 실행시키면 오류가 뜨면서 강제종료됩니다. 어떤문제인가요?

 

class Preview extends SurfaceView implements SurfaceHolder.Callback {
		private SurfaceHolder mHolder;
		private Camera camera;

		Preview(Context context) {
			super(context);
			mHolder = getHolder();
			mHolder.addCallback(this);
			mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		}

		public Camera getCamera() {
			return camera;
		}

		public void surfaceCreated(SurfaceHolder holder) {
			// 카메라 초기화
			try {
				// 전면카메라 사용
				int cameraId = findFrontSideCamera();
				camera = Camera.open(cameraId);

				// 카메라 회전
				// Camera.Parameters parameters = camera.getParameters();
				// if (this.getResources().getConfiguration().orientation !=
				// Configuration.ORIENTATION_LANDSCAPE) {
				camera.setDisplayOrientation(90);
				// }

				// parameters.setRotation(90);
				// parameters.setPreviewSize(640, 480);
				// parameters.setPictureSize(640, 480);
				// camera.setDisplayOrientation(90);
				// camera.setParameters(parameters);
				camera.setPreviewDisplay(holder);
//				camera.startPreview();

				// 미리보기의 프레임을 .setPreviewCallback()으로 새로 정의
				camera.setPreviewCallback(new PreviewCallback() {
					public void onPreviewFrame(byte[] data, Camera camera) {
						// TODO Do something with the preview image.
					}
				});
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		public void surfaceDestroyed(SurfaceHolder holder) {
			camera.stopPreview();
			camera = null;
		}

		public void surfaceChanged(SurfaceHolder holder, int format, int w,
				int h) {
			Camera.Parameters parameters = camera.getParameters();
			parameters.setPreviewSize(w, h);
			camera.setParameters(parameters);
			camera.startPreview();
		}
	}

 

요요 (180 포인트) 님이 2014년 11월 4일 질문

1개의 답변

0 추천

자세한건 로그를  봐야 겠지만. 

코드상은 surfaceDestroyed 시 stopPreview만 호출 하게 해둔 상태에서 

바로 null로 카메라 핸들을 설정해서 내부적으로 기존에 open한 camera 객체가 남아 있어서,

발생한 문제로 추정 됩니다.

종료시에는 release로 카메라 핸들을  해제한 후 null로 변경 해 보세요..

 

사악미소 (65,330 포인트) 님이 2014년 11월 5일 답변
감사합니다 도움이 많이 되었습니다!
...