본문 바로가기

개발관련/android

Camera Flash Light on off 제어하는 방법

ANDROID에서 플래쉬(카메라 뒷편 FLASH LIGHT)를 제어하는 방법입니다.
어찌보면 쉽지만.. 어찌보면 좀 까다로울 수 있습니다.

일단 ANDROID 에서 카메라를 OPEN 시켜 줘야 합니다.
(ANDROID에서는 FLASH LIGHT를 PREVIEW 상태에서 켜준다고 되어 있습니다.)

- on source

private Camera camera;
private Parameters p;

camera = Camera.open(); - 카메라를 open합니다.
p = camera.getParameters(); - open된 카메라의 설정값을 받아 옵니다.
p.setFlashMode(Parameters.FLASH_MODE_TORCH); - 플래쉬 모드에서 플래쉬를 켭니다.
camera.setParameters(p); -설정한(open)한 카메라에 설정값을 저장합니다.
camera.startPreview(); -flash를 켜기 위해서 preview 시작합니다.


위의 source를 보면 아시겠지만 surfaceView를 사용해서 실제로 preview를 띄우지 않으셔도
됩니다.

-off source

p.setFlashMode(Parameters.FLASH_MODE_OFF); - flash를 off 합니다.
camera.setParameters(p) -flash가 꺼졌다는 셋팅값을 넘겨 줍니다.
camera.stopPreview(); -카메라의 preView를 종료 합니다.(실질적으로 flash를 끕니다.)
camera.release(); -open된 카메라를 메모리에서 제거합니다.

플래시만 끄고 싶은신분들은 


p.setFlashMode(Parameters.FLASH_MODE_OFF); - flash를 off 합니다.

camera.setParameters(p) -flash가 꺼졌다는 셋팅값을 넘겨 줍니다.

camera.startPreview(); -flash를 켜기 위해서 preview 시작합니다.


이렇게 하면 됩니다.


종료 source는 복잡하지 않습니다. 다만 주의 할 내용은 마지막줄 camera.release()를 하지 않으면 다시 flash light를 켤때나 혹은 다른 다른 어플에서 Camera의 접근시 오류가 발생합니다.

그리고 permission에 다음 내용을 넣어 주시면 됩니다.

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-feature android:name="android.hardware.camera"/>



참고 Android Api 문서에는

Flash Mode 종류를

- FLASH_MODE_AUTO : Flash will be fired automaticall when required.
- FLASH_MODE_OFF   : Flash will not be fired.
- FLASH_MODE_ON     : Flash will always be fired during snapshot.
- FLASH_MODE_RED_EYE : Flash will be fired in red-eye reduction mode.
- FLASH_MODE_TORCH : Constant emission of light during preview, auto-focus and snapshot.

이렇게 입니다.

여기서 주의 점 ON 과 TORCH의 차이점은 ON은 샷이 찍힐때 만 켜지는 겁니다.
측 셔터를 눌러야 켜진다는 거죠.^^


출처 : http://swindowsit.blogspot.kr/2014/03/android-camera-flash-torch.html