JHB의 프로그래밍 삽질기

[Android] Screen On이 유저에 의해 일어난 것인지? 본문

PROGRAMMING/Android/Java

[Android] Screen On이 유저에 의해 일어난 것인지?

roter 2015.11.29 23:42

안드로이드 스마트폰에서 화면이 켜지는 경우는 크게 두가지로 나뉜다.


1. HW Key에 의해 화면이 켜짐

2. Software에 의해 화면이 켜짐


여기서 1. 하드웨어 키에 의해 화면이 켜지는 경우는 홈 버튼(Home button) / 파워 버튼(Power Button)으로 화면을 켜는 경우이며, 

2. Software에 의해 켜지는 경우는 알람, 푸쉬메세지, 전화 등 여러 'Notification'이 들어 왔을 경우에 해당한다.


나는 이 중에 1번의 경우를 캐치하고 싶었다. 2번은 철저하게 배제하고.

사용한 방법은 아래와 같다.


1) NotificationListenerService를 생성 후, Notifacation을 받을 경우 현재 시간을 SharedPreference에 저장한다.

2) BroadcastReceiver에서 Intent.ACTION_SCREEN_ON 일 경우를 Receiver해서 현재 시간을 구한 후, 1)에서 구한 시간과 비교한다.

3) 간격이 2초 이내일 경우 Software에 의해 화면이 켜진 것이고, 그 외의 경우는 유저가 하드웨어 키 입력을 통해 화면을 킨 경우이다.


갤럭시 노트4에서 테스트 해 본 결과 화면이 꺼진 상태에서 Push 메세지가 올 경우 BroadcastReceiver보다 NotificationListenerService의 onNotificationPosted() 가 더 우선 수행되었다. (다른 폰에서는 장담 못한다.)


따라서 위의 로직이 성공적으로 수행될 수 있었다.


구현은 다 했지만.. 아직 허들이 남아있다.


1. NotificationListenerService의 라이프 사이클 문제이다.

검색해도 잘 나오질 않아서 내가 직접 실험해 보기로 했다. 만약 NotificationListenerService가 LMK 등에 의해 지워지게 될 경우 위의 로직은 말짱 꽝이다. 그래서 onNotificationPosted() 일 경우에 Vibrator를 진동 시켜, 해당 Service가 언제까지 살아있는지 테스트 해보기로 했다.

하루 정도 테스트 해보면 충분할 것이라 생각한다. 결과는 내일이나 모래쯤 올리겠다.


부디 성공하길.

저작자 표시 비영리 변경 금지
신고
0 Comments
댓글쓰기 폼