Android PowerManager (앱 강제로 깨우기)

2024. 5. 13. 13:43Android

반응형

안녕하세요

 

앱을 개발하다 보면 Doze Mode 에서 앱을 강제로 깨워야 할경우가 있습니다.

 

이럴때는 PowerManager api 를 사용하면 됩니다.

 

 

사용하기 앞서 주의사항

 

PowerManager api 는 디바이스의 전원을 관리하는 api 이므로 배터리와 연관이 큽니다.

 

자칫 잘못 사용했을경우 디바이스 베터리 소모가 상당하기에

 

PowerManager api 를 정말 사용해야 하는지 많은 고민을 하고 사용하는걸 강조 드립니다.

 

AndroidManifest.xml

<uses-permission android:name="android.permission.WAKE_LOCK" />

 

java

PowerManager powerManager = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "testApp:tag");
wakeLock.acquire(1000);//1초 동안 화면 켜짐

 

 

kotlin

val powerManager = applicationContext.getSystemService(POWER_SERVICE) as PowerManager
val wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK or PowerManager.ACQUIRE_CAUSES_WAKEUP, "testApp:tag")
wakeLock.acquire(1000) //1초 동안 화면 켜짐

 

 

acquire 를 하였다면 꼭 release() 를 해줘야됩니다.

 

예제 코드

private lateinit var powerManager :PowerManager
private lateinit var wakeLock : WakeLock
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    binding = ActivityMainBinding.inflate(layoutInflater)

    setContentView(binding.root)

    powerManager = applicationContext.getSystemService(POWER_SERVICE) as PowerManager
    wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK or PowerManager.ACQUIRE_CAUSES_WAKEUP, "testApp:tag")
}

override fun onResume() {
    super.onResume()
    wakeLock.acquire(1000) //1초 동안 화면 켜짐
}

override fun onPause() {
    super.onPause()
    if(wakeLock.isHeld){
        wakeLock.release()
    }
    
}

 

 

이런식으로 사용을 하면됩니다.

 

최근에 PowerManager 에 있는 상수 들이 많이 Deprecated 가 되었습니다.

 

구글에서 지속적으로 배터리 , DozeMode 관련된 코드 및 정책들이 바뀌고 있기에 이부분에 대해 한번 봐두시면 도움이됩니다.

 

https://developer.android.com/reference/android/os/PowerManager

 

PowerManager  |  Android Developers

 

developer.android.com

 

읽어주셔서 감사합니다.

반응형