마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 notification 네이버 메일 앱처럼 표현하고 싶습니다.

0 추천

notification을 네이버 메일 앱처럼 표시하고 싶어서 며칠 동안 헤매고 있습니다.

접혀 있을 때에는 다음과 같습니다.

네이버 메일 앱 접힌 상태

 

펼쳐진 상태는 다음과 같습니다.

네이버 메일 앱 펼쳐진 상태

 

어떤 스타일의 알림을 사용한 것일까요?

다음 메일 앱은 받은편지함 스타일을 사용한 것 같은데, 네이버 메일 앱은 짐작할 수가 없습니다.

조그마한 정보라도 절실합니다. 힌트라도 주셨으면 좋겠습니다.

 

nkdpop (580 포인트) 님이 2022년 1월 31일 질문
Grouped Notification을 말씀하시는 건지 모르겠네요.
https://developer.android.com/training/notify-user/group
Grouped Notification으로 시도해 보았으나 잘 안되어서 질문 올렸습니다.
그러나 spark님의 글을 보고 재시도해서, 며칠 간 여러 시행 착오 끝에 그럴 듯하게 성공했습니다.

1개의 답변

+1 추천

질문에 spark님이 댓글 달아 주신 것처럼 grouped notification으로 해결했습니다.

혹시나 나중에 다른 분들에게도 필요할까 싶어서 제가 해결한 방법을 간단히 서술합니다.

이 방법이 정답이라는 보장은 없습니다.

 

우선 안드로이드 개발자 문서 https://developer.android.com/training/notify-user/group에 나와 있는 예대로 InBoxStyle을 사용했습니다.

 

위 개발자 문서에는 newMessageNotofication1, newMessageNotification2, summaryNotification 이렇게 3개를 만들고 있습니다만, 저의 경우에는 두 개의 notification을 만들었습니다.

먼저 띄우고자 하는 알림 newMessageNotification을 만듭니다. 제목을 굵은 글씨로 표시하기 위해서 Html.fromHtml() 함수를 이용했습니다.

        Notification newMessageNotification =
                new NotificationCompat.Builder(getApplication(), "@string/default_notification_channel_id")
                        .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_foreground))
                        .setSmallIcon(R.mipmap.ic_foreground)
                        .setContentTitle(Html.fromHtml("<b>" + title + "</b>"))
                        .setContentText(subTitle)
                        .setContentIntent(pendingIntent)
                        .setGroup(MESSAGE_GROUP)
                        .setAutoCancel(true)
                        .build();

 

두 번째로 알림 그룹 정보를 담을 summaryNotification을 만듭니다.

        Notification summaryNotification =
                new NotificationCompat.Builder(getApplication(), "@string/default_notification_channel_id")
                        .setSmallIcon(R.mipmap.ic_foreground)
                        .setStyle(new NotificationCompat.InboxStyle()
                            .setSummaryText("summaryText")
                        )
                        .setGroup(MESSAGE_GROUP)
                        .setGroupSummary(true)
                        .build();

summaryNotification의 다른 요소들은 별 영향을 주는 것 같지 않아서 생략했습니다.

 

위에서 만든 두 개의 notification을 띄웁니다.

        notificationManager.notify(notificationId, newMessageNotification);
        notificationManager.notify(SUMMARY_ID, summaryNotification);

헤매게 만든 부분이 notification id였습니다.

summayNotification의 notification id는 상수 SUMMARY_ID로 일정하게 유지하면서, 띄우는 알림인 newMessageNotification의 notification id는 변수 notificationId에 적절히 지정해 줍니다.

 

혹시 저와 같은 문제로 고생하시는 분이 계시다면 도움이 될까하여 적어 봅니다.

nkdpop (580 포인트) 님이 2022년 2월 4일 답변
해결하셨다니 축하드려요. 솔루션도 공유해 주셔서 감사하구요.
...