2013-05-16 2 views
1

나는 안드로이드 카메라 API로 작업하는 프로젝트를 만들었습니다. 하지만 (삼성 갤럭시 S)와 같은 오래된 안드로이드 휴대폰에 나는 성가신 문제가 있습니다. 사진을 찍으려고하면 응용 프로그램이 정지되고 몇 초 후에 ANR 대화 상자가 나타납니다. 내 프로그램 카메라를 죽인 후에도 카메라가 여전히 차단되어 있고 시스템 카메라 응용 프로그램에서도 사용할 수 없으며 전화 재부팅 만 도움이되었습니다. 내가받은
마지막 로그 메시지 텟은 다음과 같습니다안드로이드 카메라 frezes

새로운 장치에
QualcommCameraHardware(133): runframethread: waiting for preview thread to complete. 

모든 것이 잘 작동, 나는이 문제를 해결할 수있는 방법.

답변

1

대개 답은 간단합니다. 내가 camera.takePicture(null, null, null, pictureCallback); 수동 Camera.stopPreview(); 각 호출하기 전에 전화를 시도하고 작동이 코드에 따르면

//waiting for preview thread to complete before clearing of the buffers 
mPreviewThreadWaitLock.lock(); 
while (mPreviewThreadRunning) { 
    LOGI("runframethread: waiting for preview thread to complete."); 
    mPreviewThreadWait.wait(mPreviewThreadWaitLock); 
    LOGI("initPreview: old preview thread completed."); 
} 
mPreviewThreadWaitLock.unlock(); 

: 는 인터넷 검색의 몇 시간 후에 나는 마지막 로그 메시지를 게시 네이티브 코드를 발견했다.

UPDATE
그것은 일반적으로 당신이 중지 미리보기 사진을 찍을 수 없기 때문에 새로운 카메라 드라이버 장치에 Camera.stopPreview(); 실 거예요 작품에 해당 솔루션을 나타납니다. 대신 Camera.stopPreview();을 사용하는 대신 을 mCamera.setPreviewCallback(null);으로 제거하면 이전 및 새로운 카메라 드라이버로 테스트 한 모든 장치에서 작동합니다.

mCamera.setPreviewCallback(null); 
camera.takePicture(null, null, null, pictureCallback);