2011-11-05 6 views
4

SurfaceView까지 확장되는 사용자 정의 카메라 미리보기 CameraView을 만들었으며 SurfaceHolder.Callback 인터페이스도 구현합니다. 뷰는 카메라와 함께 작동합니다. 보기를 열면 카메라 미리보기가 표시됩니다. 동일한 화면에는 '사진 찍기', '갤러리에서 선택'등 두 개의 버튼이있는 오버레이가 있습니다. CameraView이있는 활동은 onPause()onResume() 방법으로 카메라를 해제하고 다시 엽니 다. 의도 선택기가 취소 된 후 카메라 다시 열기

나는 '선택 갤러리에서'버튼을 클릭하면

는 다음과 같은 의도가 생성됩니다 : 괜 찮 아 요 다음이 의도에 응답 할 수있는 단 하나의 활동이

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("image/*"); 
startActivityForResult(intent, LOAD_PICTURE); 

합니다. 활동이 자동으로 열리고 카메라가 해제됩니다. 갤러리에서 다시 돌아와서 CameraView 활동으로 돌아가고 카메라 미리보기가 복원됩니다.

이 의도를 처리 할 수있는 여러 활동이 있고 인 텐트 선택 대화 상자가 튀어 나오면 흥미로운 부분이 시작됩니다. 의도 선택기 대화 상자가 열리면 부모 작업에서 onPause()이 호출되고 카메라가 해제되면 화면이 검은 색이됩니다. 대화 상자에서 인 텐트를 선택하지 않고 대신 전화기의 뒤로 버튼을 클릭하면 onResume()이 호출되지만 카메라 미리보기는 다시 나타나지 않습니다. 카메라 미리보기를 다시 표시하려면 이전 활동으로 돌아가서 미리보기 활동으로 돌아 가야합니다.

대화 상자가 발생했을 때 onPause() 만 호출되었지만 실제로 다른 활동으로 전환하면 surfaceDestroyed()도 호출되므로 다음 문제가 발생합니다. onResume()에 대해서도 마찬가지입니다. 대화 상자가 뒤로 가기 버튼으로 취소되고 surfaceChanged()surfaceCreated()이 호출되지 않습니다.

제 질문은 의도 선택기 대화 상자가 취소 된 경우 카메라 미리보기를 다시 표시하는 방법입니다. SurfaceHolder.Callback 메서드를 명시 적으로 트리거하는 방법이 있습니까? hideSurface()showSurface()SurfaceView에 숨겨져 있음을 알고 있지만이 경로를 원하지 않습니다.

+0

가 대신()을 중지시에 카메라를 출시 할 방법을 시도 했습니까? 마찬가지로 onStart()에서 카메라 미리보기를 열거 나 다시 열 수 있습니다. – Houf

답변

0

카메라를 onStart 메서드로 열고 해당 작업의 onStop 메서드에서 놓았습니다. onResume 및 onPause 메소드는 Android 활동의 가시적 인 라이프 사이클의 일부입니다. OnStop은 다른 활동이 전체 보이는 공간을 차지할 때 호출됩니다. OnPause는 심지어 인 텐트 선택기 대화 상자가 팝업 될 때와 같이 보이는 공간 전체를 차지하지 않더라도 다른 액티비티가 포 그라운드로 올 때 호출됩니다. 따라서 카메라 생성 및 릴리스를 올바른 라이프 사이클 메소드로 이동하는 것이 트릭을 수행해야합니다. 현재 활동 수명주기에 대한 자세한 정보를 찾을 수 있습니다,하지만 난 당신이 잘 알고있는 확신 :

http://developer.android.com/reference/android/app/Activity.html

관련 문제