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