안드로이드 롤리팝 Notification Icon 대응

안드로이드 롤리팝 버젼에 들어서면서 Custom Notification의 아이콘이 하얗게 오버레이 되는 현상을 겪는 분이 있습니다. 사실 국내는 Kitkat 사용자가 압도적으로 많고 http://developer.android.com/intl/ko/about/dashboards/index.html 안드로이드 버젼 점유율 그래서 쉽게 이런 문제를 알 방법이 없었습니다. (저희 회사는 QA 프로세스가 아직 없는 관계로 ㅜ.ㅜ) 제 경우엔 개발기기가 넥서스(5.0)인 관계로 노티피케이션 아이콘이 OS 버전에 따라 다르게 설정되어야 함을 빠르게 알았습니다.

롤리팝 업데이트로 인해서 머터리얼 디자인 스타일의 알림 아이콘으로 변경되었습니다. 그래서

  1. 흰색과 투명색의 이미지만 사용하여야 합니다. 아이콘에 색상이 입혀져 있다면 이는 전부 안드로이드 시스템에 의해 무시되고 흰색으로 보이게 됩니다.
  2. setColor를 통해 배경색(악센트 컬러)을 정해야 하므로 흰색 아이콘과 어울리는 배경색을 지정해 주어야 합니다.

그래서 롤리팝과 동시에 하위 버젼을 대응하기 위한 여기 좋은 해결 방법이 있습니다.

public void onMessageReceived(...) {
  NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
    .setSmallIcon(getNotificationIcon())
    .setContentTitle(title)
    .setContentText(message)
    .setColor(getResources().getColor(R.color.app_color)); // accent color
}
int getNotificationIcon() {
  return android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP ? R.drawable.ic_white_icon : R.drawable.ic_launcher_icon;
}

저는 이렇게 사용합니다. SDK 22에서 테스트되었습니다. 감사합니다!