본문 바로가기
프로그래밍/Android

Android 손전등 어플 만들기

by ITPro 2011. 9. 25.


우선 적당한 이름으로 프로젝트를 하나 생성을 한다.


 

AndroidManifest.xml 파일을 열어 Activity 탭을 선택한 뒤 프로젝트를 생성할때 자동으로 생성된 액티비티의 Theme 속성의 Browse를 선택한다.

SystemResources 중 Theme.NoTitleBar.Fullscreen을 선택한다.
※Notification 영역과 Title 영역을 모두 꽉 채우기 위해서 설정한다

그다음 Permissions 탭으로 넘어가서 Uses Permission을 추가한다.


새로 생성한 Uses Permission 값으로 android.permission.CAMERA를 선택한다.
※카메라의 플래시를 사용하기 위해서 필요한 퍼미션을 받기 위해서 설정한다.


마찬가지로 Uses Permission 값으로 android.permission.HARDWARE_TEST를 추가한다.
※화면의 밝기를 설정하기 위해서 필요한 퍼미션을 받기 위해서 설정한다.


다음으로 res>layout>main.xml 파일을 열고 레이아웃의 Properties 에서 Background 값을 #ffffffff 로 설정한다.

만약 Properties 탭이 보이지 않는다면 Eclipse 좌측 하단의 fast View 아이콘을 선택하고 Others를
선택한 뒤 General>Properties를 추가해주면 된다.

대략적인 설정이 모두 완료되면 src>Package Name>Activity Name.java 파일을 열고 소스를 작성한다.


[멤버 변수]
    private float ori_BrightnessMode=0;    //기존 밝기 설정 값을 저장하기 위한 변수
    private String ori_FlashMode=null;     //기존 플래시 모드 설정 값을 저장하기 위한 변수

    private Camera camera=null;    //카메라 인스턴스를 받을 객체
    private Camera.Parameters param=null; //카메라 파라미터를 받기 위한 객체
    private List<String> list=null;    //파라미터 배열을 받기위한 List

    private Window win=null;         //윈도우 인스턴스를 받을 객체
    private WindowManager.LayoutParams lp=null;  //윈도우 파라미터를 받기 위한 객체
※Import가 필요하다고 뜨면 Ctrl + Shift + O 를 눌러 자동 임포트를 하면 된다.


[플래시 & 조명 설정 함수]
    private void setBrightness(){

        /**Window 초기 세팅**/
        win = getWindow();
        lp = getWindow().getAttributes();
        ori_BrightnessMode=lp.screenBrightness;  //기존 값을 저장해둔다.

        lp.screenBrightness = 1;    //0~1 사이의 float 값을 설정하여 밝기 조절을 한다.
        win.addFlags(lp.FLAG_KEEP_SCREEN_ON);    //화면이 꺼지는 것을 방지한다.
        win.setAttributes(lp);         //설정을 활성화 한다.
    }

    private void setFlashMode(){
        /**Camera 초기 세팅**/
        camera=Camera.open();
        param=camera.getParameters();
        list=param.getSupportedFlashModes();
        if(list != null){
                    }

        if(list != null){    //파라미터들을 정상적으로 받아들인 경우만 실행한다.
            ori_FlashMode=param.getFlashMode();  //기존 값을 저장해둔다.
            param.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);  //플래시 설정 변경
            camera.setParameters(param);    //설정을 활성화 한다.
        }
    }


[플래시 & 조명 설정 복원 함수]
    private void rtnBrightness(){
        lp.screenBrightness = ori_BrightnessMode;
        win.setAttributes(lp);
    }

    private void rtnFlashMode(){
        if(list != null){
            param.setFlashMode(ori_FlashMode);
            camera.setParameters(param);
            
            camera.release();     //인스턴스를 릴리즈시키지 않으면 정상적으로 작동하지 않는다.
            camera = null; 
        }
    }


[생성 & 파괴 함수]
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    protected void onResume(){
        // TODP Auto-generated method stub
        setBrightness();
        setFlashMode();
    }

    protected void onPause() {
        // TODO Auto-generated method stub
        rtnBrightness();
        rtnFlashMode();
        super.onPause();
    }
※onCreate 함수는 자동으로 생성 되지만 onResume,onPause 함수는 따로 생성을 해야한다.
(Alt + Shift + S -> Ctrl + V 를 눌러 자동 생성 가능한 목록에서 추가하면 편리하게 사용 가능하다.)

반응형