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(); } }
댓글 없음:
댓글 쓰기