하루종일 안드로이드

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

Comment +0

간단한 예제 만드는법


VIewDragHelper 생성자를 통해 초기화(1.0f는 시작시 민감도라고 함)




onInterceptTouchEvent 와 onTouchEvent에서 ViewDragHelper를 호출하도록 구현한다.




DragHelperCallback 내에 clampViewPositionVertical 를 구현해보자




이렇게 구현후 실행하면 작동하지 않을것이다.



onFinishInflate 메소드를 구현해야하며




ViewDragHelper.Callback 에서 필수 메소드인 tryCaptureView 에서 retrun값을 true를 주어야한다.




2차 출처 : http://flavienlaurent.com/blog/2013/08/28/each-navigation-drawer-hides-a-viewdraghelper/

1차 출처 : https://github.com/flavienlaurent/flavienlaurent.com/tree/master/viewdraghelper

Comment +0

결과)

Asia/Seoul:20140825T141111.232+0900


"Asia/Seoul" 이런걸 Timezone ID 라고 한다.


TimeZone.getAvailableIDs();

이걸로 Timezone ID를 알 수 있다.


Comment +0