티스토리 뷰


앱에서 종종 화면을 밝게 해야 하는 경우가 생기게 됩니다.
바코드 혹은 QR 코드가 화면에 떠 있어 인식률을 높여야 하는 경우가 대표적이겠네요.

안드로이드에선 화면 밝기를 조절하는 방법이 두 가지가 있는데요,
첫 번째 방법은 provider의 System 클래스에 접근해 변경하는 방법이고,
두 번째 방법은 액티비티의 리소스에 접근해 변경하는 방법입니다.

첫 번째 방법은 시스템에 직접 접근하는 방법입니다.
일반적으로 시스템에 접근하려면 시스템 권한을 추가적으로 얻어야 하는데, 이 권한은 접근성을 허가해줘야 합니다.
(requestPermission()으로 얻을 수 있는 권한이 아닙니다)
아무래도 사용자 입장에선 굉장히 불편하죠.
게다가 자동 밝기가 설정되어 있다면 자동 밝기도 해제해 줘야 합니다.

그래서 전 두 번째 방법, getAttributes()를 통해 변경하는 방법으로 화면의 밝기를 변경했습니다.
첫 번째 방법과 달리 자동 밝기에 대한 처리를 따로 해주지 않아도 되고,
코드도 간단합니다.


1. 액티비티가 켜졌을 때(onCreate()), 화면 밝기에 대한 값을 불러옵니다.

private WindowManager.LayoutParams params;
private float brightness; // 밝기값은 float형으로 저장되어 있습니다.

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // 화면 정보 불러오기
    params = getWindow().getAttributes();
}

 

2. 이후(onResume()) 화면의 밝기 값을 수정해줍니다.

@Override protected void onResume() {
    super.onResume();

    // 기존 밝기 저장
    brightness = params.screenBrightness;
    // 최대 밝기로 설정
    params.screenBrightness = 1f;
    // 밝기 설정 적용
    getWindow().setAttributes(params);
}

 

3. 액티비티가 가려지거나 종료되면(onPause()) 기존 밝기로 바꿔줍니다.
(사실 시스템 밝기를 조절하지 않기 때문에 이 부분은 생략해도 됩니다.)

@Override protected void onPause() {
    super.onPause();

    // 기존 밝기로 변경
    params.screenBrightness = brightness;
    getWindow().setAttributes(params);
}

 

getAttributes()에서 가져오는 밝기 값은 float형으로 되어 있고,
기본값은 0보다 작은 값(-1)으로 이는 시스템 환경설정을 따른다는 의미입니다.
그리고 새 값을 넣을 땐 0.0에서 1.0 사이의 값을 넣게 됩니다.
예시에서는 최대 밝기로 지정하고자 했기 때문에 1f를 넣어 적용시켰지만, 만약 밝기를 지정하고 싶다면 다른 값을 넣으셔도 됩니다.

위 방법대로 밝기를 변경하면 앱에서의 밝기만 변경되기 때문에, 앱을 끄면 원래 밝기로 돌아오게 됩니다.
밝기가 수동으로 고정되기 때문에 상단바를 내려 보면 시스템 밝기를 조절하는 부분이 사라져 있는 것을 알 수 있습니다.
물론 앱을 끄면 다시 돌아옵니다.

댓글
댓글쓰기 폼