마스터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일 답변
감사합니다 도움이 많이 되었습니다!
...