본문 바로가기
  • fishing...
  • eating...
MISCELLANEOUSNESS

Android WakeLock 화면, 키보드 항상 켜지게 수정하기.

by 회색뿔 2010. 11. 27.


[ Android WakeLock 항상 켜지게 수정 ]

안드로이드 개발을 하다보면 오래걸리는 작업이나 화면을 항상 켜두고 싶을 때가 있는데.. 이럴때 wakelock을 이용하면 된다.
오래걸리는 작업, 예를들면 파싱이나, 대용량 DB를 읽는 과정에 시간이 경과되어 화면이 꺼지면 사용자는 어플이 죽엇다고 인식하기 쉽다. 이러한 오해를 미연에 방지하기 위해서 로딩 메시지를 띄우기도 하지만 화면이 꺼지면 무용지물이다.

따라서 wakelock은 이러한 시점에서 매우 큰 도움을 준다.

wake lock은 cpu, screen, keyboard back light를 제어할 수 있는데, 그 조합이 각각 다르다.


Flag Value CPU Screen Keyboard
PARTIAL_WAKE_LOCK On* Off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright
자료 출처: developer android

조합을 확인하고 사용하면 되겠다.

코드를 작성하면서 보면 powermanager를 획득하고, wakelock을 생성해서 등록하고 해제하는 순으로 이용하게 된다.
아래 그림을 보고 소스를 보면 이해를 도울 수 있을 것이다.

1. pm =  context.getSystemService(Context.POWER_SERVICE);
2. wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "SECUEYE");
3. wl.acquire();
4. do Somethings..
5. wl.release();


그림 1] 전체적인 flow


Permission



2011.03.06 빠진 부분이 있다고 해서 추가합니다.
Souce code
	private static PowerManager pm = null;
	private static PowerManager.WakeLock wl = null;

	public static void getSystemPowermanager(){
		pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
	}
	
	public static void getSystemWakelock(){
		if( pm != null )
		wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "SECUEYE");
	}
	
	public static void aquire(){
		if( wl != null )
			wl.acquire();
	}
	
	public static void releaseWakelock()
		if( wl != null )
		{
			wl.release();
			wl = null;
		}
	}

Keyword:
screen
keyboard
PowerManager
WakeLock