| page.title=알림 |
| page.tags=알림 |
| helpoutsWidget=true |
| page.image=/preview/images/notifications-card.png |
| |
| trainingnavtop=true |
| |
| @jd:body |
| |
| <div id="qv-wrapper"> |
| <div id="qv"> |
| |
| <!-- table of contents --> |
| <h2>이 문서의 내용</h2> |
| <ol> |
| <li><a href="#direct">직접 회신</a></li> |
| <li><a href="#bundle">묶음 알림</a></li> |
| <li><a href="#custom">사용자 지정 뷰</a></li> |
| <li><a href="#style">메시지 스타일</a></li> |
| </ol> |
| |
| </div> |
| </div> |
| |
| <p>Android N에서는 가시성과 상호 작용이 뛰어난 알림을 |
| 앱이 게시할 수 있도록 여러 가지 새로운 API를 도입했습니다.</p> |
| |
| <p>Android N에서는 핸드셋에서 인라인 회신을 지원하기 위해 기존의 {@link android.support.v4.app.RemoteInput} |
| 알림 API를 확장합니다. 이 기능을 사용하면 앱을 방문하지 않고도 알림 창에서 |
| 신속하게 응답할 수 있습니다.</p> |
| |
| <p> |
| Android N에서는 또한 비슷한 알림을 묶어서 단일 알림으로 |
| 표시할 수도 있습니다. 이것이 가능하도록, Android N에서는 기존의 {@link |
| android.support.v4.app.NotificationCompat.Builder#setGroup |
| NotificationCompat.Builder.setGroup()} 메서드를 사용합니다. 사용자가 각 알림을 확장할 수 있으며, 각 알림에 대해 회신 및 |
| 닫기와 같은 동작을 알림 창에서 개별적으로 수행할 |
| 수 있습니다. |
| </p> |
| |
| <p>마지막으로, Android N에서는 또한 앱의 사용자 지정된 알림 |
| 뷰에서 시스템 장식을 활용할 수 있는 새 API를 추가합니다. 이들 API는 표준 템플릿을 통해 알림 뷰가 |
| 일관된 프레젠테이션을 공유하도록 보장해 |
| 줍니다.</p> |
| |
| <p>이 문서에서는 새 알림 기능을 앱에서 사용할 때 고려해야 |
| 하는 몇 가지 주요 변경 사항을 중점적으로 다룹니다.</p> |
| |
| <h2 id="direct">직접 회신</h2> |
| |
| <p>Android N에 있는 직접 회신 기능을 사용하여, 사용자가 문자 |
| 메시지에 신속하게 응답하거나 알림 인터페이스 내에서 직접 |
| 작업 목록을 업데이트할 수 있습니다. 핸드헬드에서 인라인 회신 동작은 알림에 연결된 추가적인 |
| 버튼으로 나타납니다. 사용자가 키보드를 통해 회신하면 |
| 시스템은 여러분이 알림 동작에 지정했던 |
| 인텐트에 텍스트 응답을 첨부하고 이 인텐트를 |
| 핸드헬드 앱으로 보냅니다. |
| |
| |
| <img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x, |
| {@docRoot}preview/images/inline-reply_2x.png 2x" width="400"> |
| <p class="img-caption"> |
| <strong>그림 1.</strong> Android N이 <strong>Reply</strong> |
| 동작 버튼을 추가합니다. |
| </p> |
| |
| <h3>인라인 회신 동작 추가</h3> |
| |
| <p>직접 회신을 지원하는 알림 동작을 만들려면: |
| </p> |
| |
| <ol> |
| <li>알림 동작에 추가할 수 있는 {@link android.support.v4.app.RemoteInput.Builder}의 |
| 인스턴스를 |
| 만듭니다. 이 클래스의 생성자는 시스템이 텍스트 입력의 키로 |
| 사용하는 문자열을 수락합니다. 나중에 핸드헬드 앱은 이 키를 사용하여 입력 텍스트를 |
| 검색합니다. |
| |
| <pre> |
| // Key for the string that's delivered in the action's intent. |
| private static final String KEY_TEXT_REPLY = "key_text_reply"; |
| String replyLabel = getResources().getString(R.string.reply_label); |
| RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY) |
| .setLabel(replyLabel) |
| .build(); |
| </pre> |
| </li> |
| <li><code>addRemoteInput()</code>을 사용하여 {@link android.support.v4.app.RemoteInput} |
| 객체를 동작에 첨부합니다. |
| |
| <pre> |
| // Create the reply action and add the remote input. |
| Notification.Action action = |
| new Notification.Action.Builder(R.drawable.ic_reply_icon, |
| getString(R.string.label), replyPendingIntent) |
| .addRemoteInput(remoteInput) |
| .build(); |
| </pre> |
| </li> |
| |
| <li>동작을 알림에 적용하고 알림을 발생합니다. |
| |
| <pre> |
| // Build the notification and add the action. |
| Notification newMessageNotification = |
| new Notification.Builder(mContext) |
| .setSmallIcon(R.drawable.ic_message) |
| .setContentTitle(getString(R.string.title)) |
| .setContentText(getString(R.string.content)) |
| .addAction(action)) |
| .build(); |
| |
| // Issue the notification. |
| NotificationManager notificationManager = |
| NotificationManager.from(mContext); |
| notificationManager.notify(notificationId, newMessageNotification); |
| |
| </pre> |
| </li> |
| |
| </ol> |
| |
| |
| <p> 시스템이 사용자에게 알림 동작이 트리거될 때 응답을 입력하라는 |
| 메시지를 표시합니다. </p> |
| |
| <img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x, |
| {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300"> |
| <p class="img-caption"> |
| <strong>그림 2.</strong> 사용자가 알림 창에서 텍스트를 입력합니다. |
| </p> |
| |
| <h3> |
| 인라인 회신에서 사용자 입력을 검색 |
| </h3> |
| |
| <p> |
| 회신 동작의 인텐트에 선언하셨던 액티비티에 대해 알림 |
| 인터페이스로부터 사용자 입력을 수신하려면: |
| </p> |
| |
| <ol> |
| <li>알림 동작의 인텐트를 입력 매개변수로서 전달하여 {@link android.support.v4.app.RemoteInput#getResultsFromIntent |
| getResultsFromIntent()}를 |
| 호출합니다. 이 메서드는 텍스트 응답이 포함된 {@link android.os.Bundle}을 |
| 반환합니다. |
| |
| <pre> |
| Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); |
| </pre> |
| </li> |
| |
| <li>({@link |
| android.support.v4.app.RemoteInput.Builder} 생성자에 제공된) 결과 키를 사용하여 번들에 쿼리를 수행합니다. 다음 코드 조각에서처럼, 메서드를 만들어 이 프로세스를 |
| 완료하고 입력 텍스트를 |
| 검색할 수 있습니다. |
| |
| <pre> |
| // Obtain the intent that started this activity by calling |
| // Activity.getIntent() and pass it into this method to |
| // get the associated string. |
| |
| private CharSequence getMessageText(Intent intent) { |
| Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); |
| if (remoteInput != null) { |
| return remoteInput.getCharSequence(KEY_TEXT_REPLY); |
| } |
| return null; |
| } |
| </pre> |
| </li> |
| |
| <li>이전 알림에 대해 제공했던 것과 동일한 알림 ID를 |
| 사용하여, 다른 알림을 작성하고 발급합니다. 사용자에게 성공적으로 회신했음을 |
| 알려주기 위해 알림 인터페이스에서 |
| 알림 표시기가 사라집니다. 이 새로운 알림으로 작업할 때, 수신기의 |
| {@code onReceive()} 메서드로 전달되는 컨텍스트를 사용하세요. |
| |
| <pre> |
| // Build a new notification, which informs the user that the system |
| // handled their interaction with the previous notification. |
| Notification repliedNotification = |
| new Notification.Builder(context) |
| .setSmallIcon(R.drawable.ic_message) |
| .setContentText(getString(R.string.replied)) |
| .build(); |
| |
| // Issue the new notification. |
| NotificationManager notificationManager = |
| NotificationManager.from(context); |
| notificationManager.notify(notificationId, repliedNotification); |
| </pre> |
| </li> |
| </ol> |
| |
| <p> |
| 채팅과 같은 대화형 앱의 경우, 검색된 텍스트를 처리할 때 |
| 추가 컨텍스트를 포함하는 것이 유용할 수 있습니다. 예를 들어, 이들 앱은 여러 줄의 채팅 기록을 |
| 표시할 수 있습니다. 사용자가 {@link |
| android.support.v4.app.RemoteInput}을 통해 응답하는 경우, |
| {@code setRemoteInputHistory()} 메서드를 사용하여 회신 기록을 업데이트할 수 있습니다. |
| </p> |
| |
| <p> |
| 앱이 원격 입력을 수신한 후에는 알림이 업데이트되거나 |
| 취소되어야 합니다. 사용자가 Direct Reply를 사용하여 원격 업데이트에 |
| 회신할 때는 알림을 |
| 취소하지 마세요. 그 대신, 사용자의 회신을 표시하도록 알림을 업데이트하세요. |
| {@code MessagingStyle}을 사용하는 알림의 경우, 회신을 최신 메시지로서 |
| 추가해야 합니다. 다른 템플릿을 사용할 경우 사용자의 |
| 회신을 원격 입력 기록에 추가할 수 있습니다. |
| </p> |
| |
| <h2 id="bundle">묶음 알림</h2> |
| |
| <p>Android N에서는 일련의 알림을 표시하기 위한 새로운 방식을 |
| 개발자에게 제공합니다. <i>묶음 알림</i>. 이것은 |
| Android Wear의 <a href="{@docRoot}training/wearables/notifications/stacks.html">알림 |
| 스택</a> 기능과 유사합니다. 예를 들어, 수신된 메시지에 대해 앱이 알림을 생성하는 경우, |
| 둘 이상의 메시지가 수신되면 그 알림을 하나의 |
| 단일 그룹으로 묶습니다. 기존의 |
| {@link android.support.v4.app.NotificationCompat.Builder#setGroup |
| Builder.setGroup()} 메서드를 사용하여 유사한 알림을 묶을 수 있습니다.</p> |
| |
| <p> |
| 알림 그룹은 이 그룹을 구성하는 알림을 계층 구조로 만듭니다. |
| 계층 구조의 맨 위는 그룹의 요약 정보가 표시되는 상위 |
| 알림입니다. 사용자는 알림 그룹을 점진적으로 확장할 수 있으며, 시스템은 |
| 사용자가 더 깊이 파고들수록 더 많은 정보를 |
| 표시합니다. 사용자가 번들을 확장하면 시스템은 모든 하위 알림에 대해 |
| 더 많은 정보를 표시하며, 사용자가 이들 알림 중 하나를 확장하면 |
| 시스템은 알림의 전체 콘텐츠를 표시합니다. |
| </p> |
| |
| <img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x, |
| {@docRoot}preview/images/bundles_2x.png 2x" width="300"> |
| <p class="img-caption"> |
| <strong>그림 3.</strong> 사용자는 알림 그룹을 점진적으로 확장할 수 |
| 있습니다. |
| </p> |
| |
| <p class="note"> |
| <strong>참고:</strong> 동일 앱이 4개 이상의 알림을 보내면서 |
| 그룹화를 지정하지 않으면, |
| 시스템에서 이들 알림을 자동으로 그룹화합니다. |
| </p> |
| |
| <p>알림을 그룹에 추가하는 방법을 알아보려면 |
| <a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">각 |
| 알림을 그룹에 추가</a>를 참조하세요.</p> |
| |
| |
| <h3 id="best-practices">묶음 알림의 모범 사례</h3> |
| <p>이 섹션에서는 이전 버전의 Android 플랫폼에서 |
| 사용되었던 {@link android.app.Notification.InboxStyle InboxStyle} |
| 알림 대신에 알림 그룹을 사용할 때의 지침을 |
| 제공합니다.</p> |
| |
| <h3>묶음 알림을 사용하는 경우</h3> |
| |
| <p>자신의 사용 사례에서 다음의 모든 조건이 충족되는 경우에만 |
| 알림 그룹을 사용해야 합니다.</p> |
| |
| <ul> |
| <li>하위 알림은 완전한 알림이며 그룹 요약이 필요 없이 |
| 개별적으로 표시될 수 있습니다.</li> |
| <li>하위 알림을 개별적으로 표시하는 경우 이점이 있습니다. 예를 들면 다음과 같습니다. |
| |
| </li> |
| <ul> |
| <li>알림이 실행 가능하며, 각 하위 알림에 맞는 동작이 있습니다.</li> |
| <li>사용자가 읽고 싶어하는 하위 알림에 더 많은 정보가 있습니다.</li> |
| </ul> |
| </ul> |
| |
| <p>알림 그룹의 사용 사례에 대한 좋은 예로는, 수신 메시지의 |
| 목록을 표시하는 메시징 앱이나 수신된 이메일의 목록을 표시하는 |
| 이메일 앱이 있습니다.</p> |
| |
| <p> |
| 단일 알림이 바람직한 사례의 예로는, 한 사람이 보낸 |
| 개별 메시지나 1줄 텍스트 항목의 목록 표시가 |
| 있습니다. 이를 수행하기 위해 |
| ({@link android.app.Notification.InboxStyle InboxStyle} 또는 |
| {@link android.app.Notification.BigTextStyle BigTextStyle})을 사용할 |
| 수 있습니다. |
| </p> |
| |
| <h3 id ="post">묶음 알림 표시</h3> |
| |
| <p> |
| 그룹에 하나의 하위 항목만 포함되어 있더라도 앱은 |
| 항상 그룹 요약을 게시해야 합니다. 하나의 알림만 포함된 경우에는 시스템이 요약을 |
| 억제하고 하위 알림을 직접 표시합니다. 이렇게 하면 사용자가 그룹의 |
| 하위 항목을 스와이프할 때 시스템이 일관된 경험을 제공할 수 |
| 있습니다. |
| </p> |
| |
| <p class="note"> |
| <strong>참고:</strong> 이 버전의 Android N에서는 아직 단일 하위 |
| 항목이 포함된 알림 그룹에 대해 요약을 억제하지 않습니다. 이 |
| 기능은 이후 버전의 Android N에 추가될 것입니다. |
| </p> |
| |
| <h3>피킹 알림</h3> |
| |
| <p>시스템은 |
| 일반적으로 하위 알림을 그룹으로 표시하지만, |
| 이 알림이 일시적으로 <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">헤드업 알림</a>으로 |
| 나타나도록 설정할 수 있습니다. 이 기능을 사용하면 가장 최근의 하위 항목과 이에 |
| 관련된 동작에 즉시 액세스할 수 있으므로 특히 유용합니다. |
| </p> |
| |
| |
| <h3>이전 버전과의 호환성</h3> |
| |
| <p> |
| Android 5.0(API 레벨 21) 이후로, 알림 그룹과 |
| 원격 입력은 Android Wear 기기를 지원하기 위한 {@link |
| android.app.Notification} API의 일부였습니다. 이미 이들 API로 알림을 작성한 경우 수행할 조치는, |
| 앱 동작이 위에 설명된 지침과 일치하는지 확인하고 {@code |
| setRemoteInputHistory()} 구현을 |
| 고려하는 것입니다. |
| </p> |
| |
| <p> |
| 이전 버전과의 호환성을 지원하기 위해, |
| 지원 라이브러리의 {@link android.support.v4.app.NotificationCompat} |
| 클래스로 동일한 API를 사용할 수 있으며, 이전 Android 버전에서 작동하는 알림을 작성할 |
| 수 있습니다. 핸드헬드와 태블릿에서는 요약 알림만 사용자에게 보이므로, |
| 앱은 해당 그룹의 전체 정보 콘텐츠에 대해 받은편지함 |
| 스타일이나 이와 동등한 알림 표시를 계속 가져야 합니다. Android |
| Wear 기기에서는 구형 플랫폼 레벨에서도 |
| 사용자가 모든 하위 알림을 볼 수 있으므로, API 레벨에 상관없이 하위 알림을 |
| 작성해야 합니다. |
| </p> |
| |
| <h2 id="custom"> 사용자 지정 뷰</h2> |
| <p>Android N부터는 알림 뷰를 사용자 지정할 수 있으며 |
| 알림 헤더, 동작 및 확장 가능한 레이아웃과 같은 시스템 장식을 계속 |
| 획득할 수 있습니다.</p> |
| |
| <p>이 기능을 활성화하기 위해, Android N에서는 다음과 |
| 같은 API를 추가하여 사용자 지정 뷰의 스타일을 지정합니다.</p> |
| |
| <dl> |
| <dt> |
| {@code DecoratedCustomViewStyle()}</dt> |
| <dd> 미디어 알림 이외의 스타일 |
| 알림.</dd> |
| <dt> |
| {@code DecoratedMediaCustomViewStyle()}</dt> |
| <dd> 스타일 미디어 알림.</dd> |
| </dl> |
| |
| <p>이 새로운 API를 사용하려면, {@code setStyle()} 메서드를 호출하여, |
| 원하는 사용자 지정 뷰 스타일에 전달합니다.</p> |
| |
| <p>이 조각에서는 |
| {@code DecoratedCustomViewStyle()} 메서드로 사용자 지정 알림 객체를 구성하는 방법을 보여줍니다.</p> |
| |
| <pre> |
| Notification notification = new Notification.Builder() |
| .setSmallIcon(R.drawable.ic_stat_player) |
| .setLargeIcon(albumArtBitmap)) |
| .setCustomContentView(contentView); |
| .setStyle(new Notification.DecoratedCustomViewStyle()) |
| .build(); |
| |
| </pre> |
| |
| <h2 id="style">메시징 스타일</h2> |
| <p> |
| Android N에서는 알림 메시지의 스타일을 사용자 지정하기 위한 새로운 API를 도입했습니다. |
| <code>MessageStyle</code> 클래스를 사용하면 대화 제목, 추가 메시지 및 알림에 대한 콘텐츠 뷰를 비롯하여 |
| 알림 메시지에 표시되는 여러 가지 레이블을 |
| 변경할 수 있습니다. |
| </p> |
| |
| <p> |
| 다음 코드 조각에서는 |
| <code>MessageStyle</code> 클래스를 사용하여 알림 스타일을 사용자 지정하는 방법을 보여 줍니다. |
| </p> |
| |
| <pre> |
| Notification notification = new Notification.Builder() |
| .setStyle(new Notification.MessagingStyle("Me") |
| .setConversationTitle("Team lunch") |
| .addMessage("Hi", timestamp1, null) // Pass in null for user. |
| .addMessage("What's up?", timestamp2, "Coworker") |
| .addMessage("Not much", timestamp3, null) |
| .addMessage("How about lunch?", timestamp4, "Coworker")); |
| </pre> |