2011년 10월 8일 토요일

Lock screen 확인

앱 실행 중 power 버튼을 눌러 화면이 꺼지고 다시 power 버튼을 눌러 화면이 켜지면 Lock screen 이 나타난다. 이 때 이미 앱은 onResume 함수가 불린 상태다.

Lock screen 에서 onResume 이 불리면 안되는 경우가 있다.

1. Lock screen 상태 인지 확인

Keyguard 서비스 객체를 얻고 inKeyguardRestrictedInputMode 함수의 결과값으로 확인한다.

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);

if (keyguardManager.inKeyguardRestrictedInputMode()) {
	// lock screen
} else {
	// lock screen 이 아님
}

2. Lock screen 이 풀리는 이벤트를 얻기

Lock screen 이 풀릴때 Intent.ACTION_USER_PRESENT 가 broadcast 된다.

private class UnlockReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		String action = intent.getAction();
		if (action.equals(Intent.ACTION_USER_PRESENT)) {

			resuming();	// 실제 작업

			if (unlockReceiver != null) {
				unregisterReceiver(unlockReceiver);
				unlockReceiver = null;
			}
		}
	}
}
3. onResume 함수에서 Lock screen 감지하여 만약 Lock screen 상태이면 위 BroadcastReceiver 를 등록하고 실제 작업을 Lock screen 이 풀리는 시점에 행해지도록 한다.

@Override
protected void onResume() {
	super.onResume();

	// check lock screen
	KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
	if (keyguardManager.inKeyguardRestrictedInputMode()) {
		IntentFilter unlockReceiverfilter = new IntentFilter();
		unlockReceiverfilter.addAction(Intent.ACTION_USER_PRESENT);
		unlockReceiver = new UnlockReceiver();
		registerReceiver(unlockReceiver, unlockReceiverfilter);
	} else {
		resuming();
	}

}

댓글 없음:

댓글 쓰기