The Android Developer Challenge is back! Submit your idea before December 2.

확장형 알림 만들기

기본 알림에는 일반적으로 제목, 텍스트 행, 사용자가 응답으로 실행할 수 있는 작업이 하나 이상 포함됩니다. 훨씬 더 많은 정보를 제공하기 위해 이 페이지에 설명된 대로 여러 알림 템플릿 중 하나를 적용하여 확장 가능한 대규모 알림을 만들 수도 있습니다.

먼저 알림 만들기에 설명된 대로 기본 콘텐츠가 모두 포함된 알림을 만드세요. 그런 다음 아래에 표시된 대로 스타일 개체로 setStyle()을 호출하고 각 템플릿에 해당하는 정보를 제공하세요.

큰 이미지 추가

알림에 이미지를 추가하려면 NotificationCompat.BigPictureStyle 인스턴스를 setStyle()에 전달하세요.

Kotlin

    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_post)
            .setContentTitle(imageTitle)
            .setContentText(imageDescription)
            .setStyle(NotificationCompat.BigPictureStyle()
                    .bigPicture(myBitmap))
            .build()
    

자바

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_post)
            .setContentTitle(imageTitle)
            .setContentText(imageDescription)
            .setStyle(new NotificationCompat.BigPictureStyle()
                   .bigPicture(myBitmap))
            .build();
    

그림 1과 같이 알림이 축소된 때만 이미지를 미리보기 이미지로 표시하려면 setLargeIcon()을 호출하여 이미지를 전달한 후 BigPictureStyle.bigLargeIcon()도 호출하고 null을 전달하여 알림이 확장되면 큰 아이콘이 사라지도록 하세요.

Kotlin

    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_post)
            .setContentTitle(imageTitle)
            .setContentText(imageDescription)
            .setLargeIcon(myBitmap)
            .setStyle(NotificationCompat.BigPictureStyle()
                    .bigPicture(myBitmap)
                    .bigLargeIcon(null))
            .build()
    

자바

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_post)
            .setContentTitle(imageTitle)
            .setContentText(imageDescription)
            .setLargeIcon(myBitmap)
            .setStyle(new NotificationCompat.BigPictureStyle()
                    .bigPicture(myBitmap)
                    .bigLargeIcon(null))
            .build();
    

그림 1. 다음을 사용한 알림: NotificationCompat.BigPictureStyle

큰 텍스트 블록 추가

알림의 확장된 콘텐츠 영역에 텍스트를 표시하려면 NotificationCompat.BigTextStyle을 적용하세요.

Kotlin

    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_mail)
            .setContentTitle(emailObject.getSenderName())
            .setContentText(emailObject.getSubject())
            .setLargeIcon(emailObject.getSenderAvatar())
            .setStyle(NotificationCompat.BigTextStyle()
                    .bigText(emailObject.getSubjectAndSnippet()))
            .build()
    

자바

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_mail)
            .setContentTitle(emailObject.getSenderName())
            .setContentText(emailObject.getSubject())
            .setLargeIcon(emailObject.getSenderAvatar())
            .setStyle(new NotificationCompat.BigTextStyle()
                    .bigText(emailObject.getSubjectAndSnippet()))
            .build();
    

그림 2. 다음을 사용한 알림: NotificationCompat.BigTextStyle

팁: 텍스트에 서식(굵게, 기울임꼴, 줄바꿈 등)을 추가하려면 HTML 마크업을 사용하여 스타일을 추가하세요.

받은편지함 스타일 알림 만들기

수신 이메일의 스니펫과 같은 짧은 요약 행을 여러 개 추가하려면 NotificationCompat.InboxStyle을 적용하세요. 이렇게 하면 NotificationCompat.BigTextStyle에서 제공하는 연속된 텍스트 한 줄 대신 각각 한 줄로 잘린 콘텐츠 텍스트 여러 개를 추가할 수 있습니다.

새 줄을 추가하려면 addLine()을 최대 6번 호출하세요. 7줄 이상 추가하면 처음 6줄만 표시됩니다.

Kotlin

    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_mail)
            .setContentTitle("5 New mails from " + sender.toString())
            .setContentText(subject)
            .setLargeIcon(aBitmap)
            .setStyle(NotificationCompat.InboxStyle()
                    .addLine(messageSnippet1)
                    .addLine(messageSnippet2))
            .build()
    

자바

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_mail)
            .setContentTitle("5 New mails from " + sender.toString())
            .setContentText(subject)
            .setLargeIcon(aBitmap)
            .setStyle(new NotificationCompat.InboxStyle()
                    .addLine(messageSnippet1)
                    .addLine(messageSnippet2))
            .build();
    

팁: HTML 마크업을 사용하여 스타일을 추가(예: 제목을 굵게 표시)하여 각 줄에서 메시지 제목과 메시지를 구별할 수 있습니다.

알림에 대화 표시

여러 사람 사이의 순차 메시지를 표시하려면 NotificationCompat.MessagingStyle을 적용하세요. 이 기능은 보내는 사람 이름과 메시지 텍스트를 별도로 처리하여 각 메시지에 일관성 있는 레이아웃을 제공하고 각 메시지가 여러 줄을 차지할 수 있으므로 메시지 앱에 이상적입니다.

새 메시지를 추가하려면 addMessage()를 호출하고 메시지 텍스트, 받은 시간, 보내는 사람 이름을 전달하세요. 이 정보를 NotificationCompat.MessagingStyle.Message 개체로 전달할 수도 있습니다.

Kotlin

    var message1 = NotificationCompat.MessagingStyle.Message(messages[0].getText(),
            messages[0].getTime(),
            messages[0].getSender())
    var message2 = NotificationCompat.MessagingStyle.Message(messages[1].getText(),
            messages[1].getTime(),
            messages[1].getSender())
    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_message)
            .setStyle(NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                    .addMessage(message1)
                    .addMessage(message2))
            .build()
    

자바

    NotificationCompat.MessagingStyle.Message message1 =
            new NotificationCompat.MessagingStyle.Message(messages[0].getText(),
                                                          messages[0].getTime(),
                                                          messages[0].getSender());
    NotificationCompat.MessagingStyle.Message message2 =
            new NotificationCompat.MessagingStyle.Message(messages[1].getText(),
                                                          messages[1].getTime(),
                                                          messages[1].getSender());

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            .setSmallIcon(R.drawable.new_message)
            .setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
                    .addMessage(message1)
                    .addMessage(message2))
            .build();
    

그림 3. 다음을 사용한 알림: NotificationCompat.MessagingStyle

setConversationTitle()을 호출하여 대화 위에 표시되는 제목을 추가할 수도 있습니다. 사용자가 만든 그룹 이름 또는 특정한 이름이 없는 경우 대화 참가자 목록이 제목으로 표시됩니다. 시스템에서 이 필드의 존재가 대화가 그룹임을 나타내는 힌트로 사용되므로 일대일 채팅에는 대화 제목을 설정하지 마세요.

이 스타일은 Android 7.0(API 레벨 24) 이상을 실행하는 기기에만 적용됩니다. 위에 설명된 대로 호환성 라이브러리(NotificationCompat)를 사용하는 경우 MessagingStyle이 적용된 알림은 지원되는 확장된 알림 스타일로 자동으로 돌아갑니다.

채팅 대화를 위해 이와 같은 알림을 만드는 경우 바로 답장 작업도 추가해야 합니다.

미디어 컨트롤로 알림 만들기

미디어 재생 컨트롤 및 추적 정보를 표시하려면 NotificationCompat.MediaStyle을 적용하세요.

최대 다섯 개의 개별 아이콘을 표시하려면 addAction()을 최대 다섯 번 호출하세요. 앨범 아트워크를 설정하려면 setLargeIcon()을 호출하세요.

다른 알림 스타일과 달리 MediaStyle을 사용하면 축소된 뷰에도 표시되어야 하는 작업 버튼 세 개를 지정하여 축소된 크기 콘텐츠 뷰를 수정할 수도 있습니다. 이렇게 하려면 setShowActionsInCompactView()에 작업 버튼 색인 세 개를 제공하세요.

알림이 활성 미디어 세션을 나타내는 경우 MediaSession.TokensetMediaSession()을 사용하여 알림에 첨부하세요. 그런 다음 Android에서 이 토큰을 활성 미디어 세션을 나타내는 알림으로 식별하고 적절하게(예를 들어 잠금 화면에 앨범 아트워크 표시) 응답합니다.

Kotlin

    import android.support.v4.app.NotificationCompat
    import android.support.v4.media.app.NotificationCompat as MediaNotificationCompat

    var notification = NotificationCompat.Builder(context, CHANNEL_ID)
            // Show controls on lock screen even when user hides sensitive content.
            .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
            .setSmallIcon(R.drawable.ic_stat_player)
            // Add media control buttons that invoke intents in your media service
            .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
            .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent) // #1
            .addAction(R.drawable.ic_next, "Next", nextPendingIntent) // #2
            // Apply the media style template
            .setStyle(MediaNotificationCompat.MediaStyle()
                    .setShowActionsInCompactView(1 /* #1: pause button \*/)
                    .setMediaSession(mediaSession.getSessionToken()))
            .setContentTitle("Wonderful music")
            .setContentText("My Awesome Band")
            .setLargeIcon(albumArtBitmap)
            .build()
    

자바

    Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
            // Show controls on lock screen even when user hides sensitive content.
            .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
            .setSmallIcon(R.drawable.ic_stat_player)
            // Add media control buttons that invoke intents in your media service
            .addAction(R.drawable.ic_prev, "Previous", prevPendingIntent) // #0
            .addAction(R.drawable.ic_pause, "Pause", pausePendingIntent)  // #1
            .addAction(R.drawable.ic_next, "Next", nextPendingIntent)     // #2
            // Apply the media style template
            .setStyle(new android.support.v4.media.app.Notification.MediaStyle()
                    .setShowActionsInCompactView(1 /* #1: pause button */)
                    .setMediaSession(mediaSession.getSessionToken()))
            .setContentTitle("Wonderful music")
            .setContentText("My Awesome Band")
            .setLargeIcon(albumArtBitmap)
            .build();
    

그림 4. 다음을 사용한 알림: NotificationCompat.MediaStyle

자세한 내용은 포그라운드 서비스로 MediaStyle 알림 사용 을 읽어보세요. 알림을 사용하는 샘플 코드에 관해서는 Android 알림 샘플을 참조하세요.