안드로이드 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앱에서 적용하였다.