WakeLock은 PowerManger 클래스의 메소드이며 앱이 항상 켜져있음을 나타내는 메커니즘
안드로이드 기능 WakeLock을 사용하기 위해서는 안드로이드 권한을 얻어야 한다.
AndroidManifest.xml 매니페스트에 WAKE_LOCK 권한을 추가한다.
<uses-permission android:name="android.permission.WAKE_LOCK" />
WakeLock을 사용하기 위해 PowerManager와 WakeLock객체를 선언해야한다.
var powerManager: PowerManager? = null
var wakeLock: WakeLock? = null
다른 Flag도 있지만 일단 필요한 것만 적었다.
wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK , "com.example.jetpacksemina.navigation:wakelock" )
wakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP , "com.example.jetpacksemina.navigation:wakelock" )
wakeLock = powerManager.newWakeLock(PowerManager.ON_AFTER_RELEASE , "com.example.jetpacksemina.navigation:wakelock" )
-
SCREEN_BRIGHT_WAKE_LOCK- CPU 와 화면을 밝게하며 키보드는 off 상태- (여기서 화면을 살짝 어둡게 키기위해서 PowerManger.DIM_WAKE_LOCK을 사용가능 또한 CPU만 On시키기 위해 PowerManger.PARTIAL_WAKE_LOCK을 사용가능)
- ACQUIRE_CAUSES_WAKEUP - 화면 켜기
- ON_AFTER_RELEASE - WakeLock이Release되고 어느정도 조명이 유지되도록 함
이렇게 만든 wakeLock을 시작할 시점에서 acquire() 함수를 통해 잠들어있는 단말기를 깨울 수 있다.
wakeLock.acquire()
주의할 점은 WakeLock을 사용하는 순간 단말기에 많은 배터리가 지속해서 소모하기 때문에 WakeLock이 더이상 필요없는 시점에 최대한 빨리 release() 작업을 수행하는것이 바람직하다.
나는 일정시간 동안 수행 해야하는 작업이 있어 그 작업이 끝나면 relase()를 호출해서 wakeLock을 종료해주었다.
또한 acquire() 함수에 long 형식의 매개변수를 추가함으로써 WakeLock을 해제하기 전까지 시간제한(milisecond 단위)을 지정할 수도 있다.
wakeLock.release()
++ 추가
SCREEN_BRIGHT_WAKE_LOCK,DIM_WAKE_LOCK
옵션은 Deprecated되었고, 대신 WindowManager.LayoutParams#FLAG_KEEP_SCREEN_ON를 이용하라고 한다.
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
이 접근 방식의 장점은 wake lock과 달리 특정 권한이 필요하지 않고 앱이 사용하지 않는 리소스를 해제할 필요 없이 사용자가 Application 간에 이동할 수 있도록 플랫폼이 올바르게 관리한다고 한다.
또 다른 방법으로 레이아웃 XML 파일에 android:keepScreenOn 속성을 사용하여 다음과 같이 구현도 가능하다 한다.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
...
</RelativeLayout>
아래부터는 Java 버전
private PowerManager powerManager;
private PowerManager.WakeLock wakeLock;
powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(
PowerManager.SCREEN_BRIGHT_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP |
PowerManager.ON_AFTER_RELEASE,
"WAKELOCK");
wakeLock.acquire(); // WakeLock 깨우기
wakeLock.release(); // WakeLock 해제
FLAG_KEEP_SCREEN_ON
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
WakeLock
https://codechacha.com/ko/android-powermanager-wakelock/
'Android > Reference' 카테고리의 다른 글
Scroll 상, 하단바 숨기기 (CoordinatorLayout) (0) | 2021.12.16 |
---|---|
ClickCountListener (특정횟수 클릭 리스너) (0) | 2021.12.10 |
Indicator (인디케이터) 실습 (0) | 2021.03.29 |
RecyclerView GridLayoutManager spansize 커스텀 (0) | 2021.03.26 |
Android 현재/과거 날짜 시간 구하기 (SimpleDataFormat) (0) | 2021.03.04 |