포스팅 환경
- M1 Mac OS Monterey 12.6
- Android Studio Dolphin 2021.3.1 Patch1 (ARM)
- Gradle 7.4
- Android Build Gradle 7.3.1
- Kolin 1.7.20
- Target SDK 32
보통 안드로이드 디바이스 화면을 깨우는 기능이 필요한 일이 흔하지 않은데
저는 FCM 을 구현하던 중에 푸쉬를 받았을 때 화면이 켜져야 할 코드가 필요했습니다.
여러 코드가 있지만 저는 아래 코드를 사용하였는데요
이 코드를 알려드리겠습니다.
안드로이드 디바이스 화면을 깨우는 코드는 생각보다 간단합니다.
바로 아래의 코드인데요
fun wakeUpScreen() {
val pm = getSystemService(POWER_SERVICE) as? PowerManager
pm?.let { _pm ->
if (!pm.isInteractive) {
val wLock = pm.newWakeLock(
PowerManager.SCREEN_DIM_WAKE_LOCK
or PowerManager.ACQUIRE_CAUSES_WAKEUP
or PowerManager.ON_AFTER_RELEASE,
"app:Tag"
)
wLock.acquire(1000L)
// wLock.release()
}
}
}
위 코드에서 중요한 부분은 newWakeLock() 함수에 넣는 파라미터 중에
flag 옵션과 이후 호출 해주는 acquire(), release() 함수에 있습니다.
SCREEN_DIM_WAKE_LOCK
화면이 켜지는데 어떤 밝기로 켜질 것 인가? 에 대한 설정을하는 옵션 입니다.
이 옵션을 주면 화면이 흐린 밝기로 켜지게 되며 디바이스의 키보드는 백라이트가 꺼진 형태로 표시 됩니다.
ACQUIRE_CAUSES_WAKEUP
기기를 깨우는 역할을 하는 플래그입니다. 만약 화면이 켜져 있다면 꺼지지 않고 계속 켜져 있도록 해주는 플래그입니다.
ON_AFTER_RELEASE
기기가 깨어나면 좀 더 오래 켜져 있도록 합니다. 아직 켜져 있지 않으면 화면을 켜지 않습니다.
acquire()
acquire 함수의 경우 기기를 깨우는 역할을 하는 함수 입니다.
acquire() 함수에 long 타입의 milliseconds 시간을 줄 경우.
그 milliseconds 의 시간 이후 함수 내부에서 release 함수를 호출하게 됩니다.
따라서 따로 release 함수를 호출할 필요가 없습니다.
release()
release 함수의 경우 acquire 함수를 호출해서 CPU 를 깨운 이후에 필히 호출해야 합니다.
그렇지 않으면 앱이 계속 기기의 CPU 를 사용하거나 혹은 스크린이 꺼지지 않아 배터리 소모를 유발할 수 있기 때문입니다.
그래서 필히 호출 하여야 합니다.
주의할점
XXXX_XXX_WAKE_LOCK flag 의 경우 android 4.2(API 17) 부터 디프리케이트 되었지만
이 플래그를 넣어주지 않을 경우 Exception 이 발생합니다.
그래서 꼭 이 플래그를 함께 넣어줘야 정상적으로 코드가 실행됩니다.
java.lang.IllegalArgumentException: Must specify a valid wake lock level.
https://stackoverflow.com/questions/15555630/specify-valid-wake-lock-level
이상으로 포스팅을 마치겠습니다.
감사합니다. :)
'Develop > Android' 카테고리의 다른 글
[Android] 기기 화면 회전에 따른 Activity, Fragment 대응 전략 (0) | 2024.02.10 |
---|---|
[Android] - Gradle Dependency 최신 버전 쉽게 확인하기 (0) | 2022.10.21 |
[Android] - Assets 내부의 파일 접근하기 (0) | 2022.09.23 |
[Android] - Android Studio Assets 폴더 만들기 (0) | 2022.09.23 |
[Android] - 구글플레이 콘솔에서 앱 서명키 정보 확인 (0) | 2022.09.16 |