티스토리 뷰
앱에서 종종 화면을 밝게 해야 하는 경우가 생기게 됩니다.
바코드 혹은 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를 넣어 적용시켰지만, 만약 밝기를 지정하고 싶다면 다른 값을 넣으셔도 됩니다.
위 방법대로 밝기를 변경하면 앱에서의 밝기만 변경되기 때문에, 앱을 끄면 원래 밝기로 돌아오게 됩니다.
밝기가 수동으로 고정되기 때문에 상단바를 내려 보면 시스템 밝기를 조절하는 부분이 사라져 있는 것을 알 수 있습니다.
물론 앱을 끄면 다시 돌아옵니다.
'Dev > Android' 카테고리의 다른 글
화면 오버레이 감지됨 해결하기 (1) | 2017.04.25 |
---|---|
Typekit으로 커스텀 폰트 적용하기 (0) | 2017.04.08 |
안드로이드 스튜디오에서 한글 깨짐 해결하기 (10) | 2016.12.29 |
EditText의 키보드 모양 변경하기 (0) | 2016.12.23 |
스플래시 스크린(Splash screen) 구현하기 (1) | 2016.12.14 |
- Total
- Today
- Yesterday