안드로이드 Notification Listener Service



안드로이드 4.3(API 18)부터 NotificationListenerService가 생겼다. 노티피케이션을 모두 읽어 오거나 지워지거나 삭제됨을 Listener를 통해 콜백받을 수 있다. 사용법은 굉장히 쉽다. 특별히 리시버를 등록한다던가의 작업없이 NotificationListenerService를 상속받아서 구현하면 된다.

이 서비스를 실행하기위해서는 서비스와 마찬가지로 안드로이드 메니페스트에 등록을 해야한다.

이렇게 메니페스트에 등록이 되었다고 해서 읽을 수 없다. 노티피케이션을 보안과 관련된 민감한 정보들이 많기 때문에 사용자가 직접 해당앱에 대해서 읽을 권한을 주어야한다. 환경설정 > 보안 > Notification Access에서 노티피케이션을 읽을 권한을 주겠다는 앱들에 대해서만 작동한다.

노티피케이션 액세스 설정으로 바로가기 위해서는 아래와 같이 Intent를 통해 사용자에게 도움을 줄 수있다.

노티피케이션은 Notification.extras에 Bundle로 들어오게 되는데 아래 키를 통해 필요한 데이터를 읽으면 된다.

Bundle[
{android.title=Gabriele Mariotti,
android.subText=null,
android.showChronometer=false,
android.icon=2130838949,
android.text=Send a message with Hangouts,
android.progress=0,
android.progressMax=0,
android.showWhen=true,
android.largeIcon=android.graphics.Bitmap@42075010,
android.infoText=null,
android.progressIndeterminate=false,
android.scoreModified=false}]

모든 Notification 읽기

Android NotificationListenerService를 이용하면 다양한 재미있는 탭을 만들 수 있다. Facebook Home같은 경우 락스크린에  노티피케이션을 읽어서 전혀다른 UI를 만들어서 보여준다.

나의 경우에도 Traffic Wear앱에서 적용하였다.

 


“안드로이드 Notification Listener Service”에 대한 4개의 생각

  1. !안녕하세요!!좋은 포스팅 덕분에 공부 열심히 하고있습니다!! 정말 감사합니다. 그런데 메인코드라고 적어놓으신 부분이 MainActivity의 역할을 하는건가요? 아니면 메인 엑티비티는 따로 있는건지 궁금합니다. 그리고 혹시나 전체파일을 받아볼 수 있을까요..?

    1. MainActivity의 역할은 따로 없습니다. MainActivity에 뷰를 구성하여 사용자가 노티피케이션 권한을 좀더 쉽게 획득하기위한 설정페이지 안내로 이동할 수 있도록 가이드를 해주는 역할을 합니다.

  2. extras 는 API 19 부터 적용 가능한거 아닌가요 ? 혹시 18에서도 적용이 가능한가요?

댓글 남기기