2014년 3월 4일 화요일

[ANDROID CODE / 안드로이드] android screen brightness control 화면 밝기 조정

android 화면 밝기 조정에는

2가지 경우가 있다.

- 안드로이드 시스템의 밝기를 조정하는 것
   (0~255 의 값을 가지고 있다)

- 윈도우 매니저의 밝기 조정(내가 만들고 있는 앱의 밝기)
   (0.00~1.00 값을 가지고 있다. 참고로 0%~100% 값이 라고 생각하면 쉽다.)
   (이 값을 0으로 만들면 화면이 아예꺼지는 불상사를 보게 된다.)

화면 밝기를 조정하기 위해서는 위의 두가지 모두를 조절해 주어야 한다.

화면의 밝기를 조정하는 것은 시스템의 셋팅값을 건들이는 것이기 때문에

Pemission 을 추가 해주어야 한다. 꼭~~~~~~

<user-permission android:name = "android.permission.WRITE+SETTINGS"/>


화면의 밝기를 조정하는 것이기 때문에 몇가지 생각해 봐야 할 문제가 있습니다.

- 사용자가 화면의 밝기를 어느정도 사용하고 있었는지
  (앱이 종료되면 사용자가 사용하던 밝기로 돌려 주어야 한다.)

- 사용자가 혹시 자동밝기를 사용하고 있지는 않았는지
  (앱이 아무리 밝기를 조정하려고 해도 자동밝기가 ON되어 있는 상태라면 변화가 없다.)

- 시간이 지난후에 화면 꺼지면 안된다.
  (어둔곳에서 화면이 꺼지면.. 헉~~~ㅡㅡ;;)



=================================================================================
이제 해결을 해보자


- 사용자가 화면의 밝기를 어느정도 사용하고 있었는지
  (앱이 종료되면 사용자가 사용하던 밝기로 돌려 주어야 한다.)


try{

    now_bright_status = android.provider.Settings.System.getInt(getContentResolver(),
                                  
                                            android.provider.Settings.System.SCREEN_BRIGHTNESS);


}catch(Exception e){
   
     Log.e("Exception e "+e.getMessage(), null);

}

위의 코드는 현제 스크린의 밝기를 얻어 와서 저장하는 코드.

이걸 이용해서 현제 밝기를 저장한다.

=================================================================================

- 사용자가 혹시 자동밝기를 사용하고 있지는 않았는지
  (앱이 아무리 밝기를 조정하려고 해도 자동밝기가 ON되어 있는 상태라면 변화가 없다.)

if(android.provider.Settings.System.getInt(getContentResolver(),

                            android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE) = 1){

    android.provider.Settings.System.putInt(getContentResolver(),

                            android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, 0);

}

참고 : 자동밝기의 값은 0 = 사용안함 / 1 = 사용함

=================================================================================

- 시간이 지난후에 화면 꺼지면 안된다.
  (어둔곳에서 화면이 꺼지면.. 헉~~~ㅡㅡ;;)

param.flags |= WindowManager.LayoutParam.FLAG_KEEP_SCREEN_ON;

=================================================================================

이제는 진짜 화면 밝기를 변경가능하게 하는 코드를 작성한다.

일단 화면 밝기 조정하면 기억나는 것이 좌우던 위아래던 터치후 움직이는 것인데

그걸 사용 할 수 있는 것이 SeekBar 이다.

SeekBarOnSeekBarChangeListener를 사용한다.

SeekBar.OnSeekBarChangeListener seekbar_listener = new OnSeekBarChangeListener(){

 @override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {

    SeekBar의 값이 변화할때 호출

}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

   SeekBar를 터치할때 호출

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

   SeekBar에서 손을 땔때 호출

}


};


OnSeekBarChangeListener는 위의 3개의 함수를 오버라이드 해서 사용한다.

이중에서 SeekBar의 값이 변할때 필요하기 때문에 onProgressChanged를 사용한다.


함수 안에 사용될 내용을 보면

if(progress<10){
   progress = 10;
   seekbar.setProgress(progress);
}

if(progress>250){
   progress = 250;
   seekbar.setProgress(progress); 
}

WindowManager.LayoutParam params = getWindow().getAttributes();
params.screenBrightness = (float) progress / 100;
getWindows().setAttributes(params);

android.provider.Settings.System.putInt(getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, progress);

이렇게 하면 화면이 바뀐다.

좀 더 설명하면

처음에 if문은 최소값을 위해서 위에서 언급했지만 0이되면 화면은 검게 되어 버린다.

두번째 if문은 최대값을 위해서 값을 제한 시킨 것이고

params.screenBrightness = (float)progress / 100;

은 윈도우 매니저의 밝기를 바꾸기 위한 값을 만드는 것

android.provider.Settings.System.putInt(getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, progress);

은 안드로이드 시스템의 밝기를 변경하는 것

이렇게 한 후 확인하면 SeekBar의 값에 따라서 화면의 밝기가 변화하는 것을 볼 수 있다.


댓글 없음:

댓글 쓰기