티스토리 뷰
안드로이드 스마트폰에서 화면이 켜지는 경우는 크게 두가지로 나뉜다.
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가 언제까지 살아있는지 테스트 해보기로 했다.
하루 정도 테스트 해보면 충분할 것이라 생각한다. 결과는 내일이나 모래쯤 올리겠다.
부디 성공하길.
'Development > Mobile' 카테고리의 다른 글
Oppo Phone Android 디버깅 불가 문제 (0) | 2019.04.28 |
---|---|
[Android] Custom Dialog의 가로 길이를 화면에 꽉 차게 설정하는 법 (1) | 2016.11.09 |
[Android] getTextBounds를 통한 글씨 영역 구하기 Bug? (0) | 2015.12.28 |
[Android] SurfaceView의 FPS 관리 (Delta Time) (0) | 2015.12.21 |
[Android] NotificationListnerService 완벽 예제 (0) | 2015.11.29 |
[Android] Service 실행 여부 파악하기 (0) | 2015.11.29 |
[Android] Android System Application (기본 설치앱) 지우기 (0) | 2015.11.29 |
[Android JNI/NDK] 로그 출력 (0) | 2015.09.21 |
- Total
- Today
- Yesterday
- 음악
- 리눅스
- API
- jni강좌
- db
- linux
- AWS
- it
- android
- algorithm
- Cloud
- 안드로이드
- database
- MFC
- 프로그래밍
- Quiz
- kering
- NDK
- gcc
- jni
- Troubleshooting
- java
- source
- Python
- C
- winapi
- Visual C++
- driver
- C++
- 드라이버
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |