| page.title=Notifications | |
| page.tags="notifications","design" | |
| @jd:body | |
| <a class="notice-developers right" href="{@docRoot}training/notify-user/index.html"> | |
| <div> | |
| <h3>Developer Docs</h3> | |
| <p>Notifying the User</p> | |
| </div> | |
| </a> | |
| <a class="notice-designers right" href="notifications_k.html"> | |
| <div> | |
| <h3>Notifications in Android 4.4 and Lower</h3> | |
| </div> | |
| </a> | |
| <!-- video box --> | |
| <a class="notice-developers-video right" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY"> | |
| <div> | |
| <h3>Video</h3> | |
| <p>DevBytes: Notifications in the Android L Developer Preview</p> | |
| </div> | |
| </a> | |
| <style> | |
| .col-5, .col-6, .col-7 { | |
| margin-left:0px; | |
| } | |
| </style> | |
| <p>The notification system allows users to keep informed about relevant and | |
| timely | |
| events in your app, such as new chat messages from a friend or a calendar event. | |
| Think of notifications as a news channel that alerts the user to important | |
| events as | |
| they happen or a log that chronicles events while the user is not paying | |
| attention—and one that is synced as appropriate across all their Android devices.</p> | |
| <h4 id="New"><strong>New in Android 5.0</strong></h4> | |
| <p>In Android 5.0, notifications receive important updates: structurally, | |
| visually, and functionally:</p> | |
| <ul> | |
| <li>Notifications have undergone visual changes consistent with the new | |
| material design theme.</li> | |
| <li> Notifications are now available on the device lock screen, while | |
| sensitive content can still | |
| be hidden behind it.</li> | |
| <li>High-priority notifications received while the device is in use now use a new format called | |
| heads-up notifications.</li> | |
| <li>Cloud-synced notifications: Dismissing a notification on one of your | |
| Android devices dismisses it | |
| on the others, as well.</li> | |
| </ul> | |
| <p class="note"><strong>Note:</strong> Notification design in this version of | |
| Android is a significant | |
| departure from that of previous versions. For information about notification design in previous | |
| versions, see <a href="./notifications_k.html">Notifications in Android 4.4 and lower</a>.</p> | |
| <h2 id="Anatomy">Anatomy of a Notification</h2> | |
| <p>This section goes over basic parts of a notification and how they can | |
| appear on different types of devices.</p> | |
| <h3 id="BaseLayout">Base layout</h3> | |
| <p>At a minimum, all notifications consist of a base layout, including:</p> | |
| <ul> | |
| <li> The notification's <strong>icon</strong>. The icon symbolizes the | |
| originating app. It may also | |
| potentially indicate notification type if the app generates more than one | |
| type.</li> | |
| <li> A notification <strong>title</strong> and additional | |
| <strong>text</strong>.</li> | |
| <li> A <strong>timestamp</strong>.</li> | |
| </ul> | |
| <p>Notifications created with {@link android.app.Notification.Builder Notification.Builder} | |
| for previous platform versions look and work the same in Android | |
| 5.0, with only minor stylistic changes that the system handles | |
| for you. For more information about notifications on previous versions of | |
| Android, see | |
| <a href="./notifications_k.html">Notifications in Android 4.4 and lower</a>.</p></p> | |
| <img style="margin:20px 0 0 0" | |
| src="{@docRoot}images/android-5.0/notifications/basic_combo.png" | |
| alt="" width="700px" /> | |
| <div style="clear:both;margin-top:20px"> | |
| <p class="img-caption"> | |
| Base layout of a handheld notification (left) and the same notification on Wear (right), | |
| with a user photo and a notification icon | |
| </p> | |
| </div> | |
| <h3 id="ExpandedLayouts">Expanded layouts</h3> | |
| <p>You can choose how much detail your app's notifications should | |
| provide. They can show the first | |
| few lines of a message or show a larger image preview. The additional | |
| information provides the user with more | |
| context, and—in some cases—may allow the user to read a message in its | |
| entirety. The user can | |
| pinch-zoom or perform a single-finger glide to toggle between compact | |
| and expanded layouts. | |
| For single-event notifications, Android provides three expanded layout | |
| templates (text, inbox, and | |
| image) for you to use in your application. The following images show you how | |
| single-event notifications look on | |
| handhelds (left) and wearables (right).</p> | |
| <img style="margin-top:30px" | |
| src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png" | |
| alt="" width="700px" height;="284px" /> | |
| <img style="margin-top:30px" | |
| src="{@docRoot}images/android-5.0/notifications/stack_combo.png" | |
| alt="" width="700px" height;="284px" /> | |
| <img style="margin-top:30px" | |
| src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png" | |
| alt="" width="311px" height;="450px" /> | |
| <h3 id="actions" style="clear:both; margin-top:40px">Actions</h3> | |
| <p>Android supports optional actions that are displayed at the bottom | |
| of the notification. | |
| With actions, users can handle the most common tasks for a particular | |
| notification from within the notification shade without having to open the | |
| originating application. | |
| This speeds up interaction and, in conjunction with swipe-to-dismiss, helps users focus on | |
| notifications that matter to them.</p> | |
| <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" | |
| alt="" width="700px" /> | |
| <p style="clear:both">Be judicious with how many actions you include with a | |
| notification. The more | |
| actions you include, the more cognitive complexity you create. Limit yourself | |
| to the smallest number | |
| of actions possible by only including the most imminently important and | |
| meaningful actions.</p> | |
| <p>Good candidates for actions on notifications are actions that:</p> | |
| <ul> | |
| <li> Are essential, frequent, and typical for the content type you're | |
| displaying | |
| <li> Allow the user to accomplish tasks quickly | |
| </ul> | |
| <p>Avoid actions that are:</p> | |
| <ul> | |
| <li> Ambiguous | |
| <li> The same as the default action of the notification (such as "Read" or | |
| "Open") | |
| </ul> | |
| <p>You can specify a maximum of three actions, each consisting of an action | |
| icon and name. | |
| Adding actions to a simple base layout makes the notification expandable, | |
| even if the | |
| notification doesn't have an expanded layout. Since actions are only shown for | |
| expanded | |
| notifications and are otherwise hidden, make sure that any action a | |
| user can invoke from | |
| a notification is available from within the associated application, as | |
| well.</p> | |
| <h2 style="clear:left">Heads-up Notification</h2> | |
| <div class="figure" style="width:311px"> | |
| <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" | |
| alt="" width="311px" /> | |
| <p class="img-caption"> | |
| Example of a heads-up notification (incoming phone call, high priority) | |
| appearing on top of an | |
| immersive app | |
| </p> | |
| </div> | |
| <p>When a high-priority notification arrives (see right), it is presented | |
| to users for a | |
| short period of time with an expanded layout exposing possible actions.</p> | |
| <p> After this period of time, the notification retreats to the notification | |
| shade. If a notification's <a href="#correctly_set_and_manage_notification_priority">priority</a> is | |
| flagged as High, Max, or full-screen, it gets a heads-up notification.</p> | |
| <p><b>Good examples of heads-up notifications</b></p> | |
| <ul> | |
| <li> Incoming phone call when using a device</li> | |
| <li> Alarm when using a device</li> | |
| <li> New SMS message</li> | |
| <li> Low battery</li> | |
| </ul> | |
| <h2 style="clear:both" id="guidelines">Guidelines</h2> | |
| <h3 id="MakeItPersonal">Make it personal</h3> | |
| <p>For notifications of items sent by another person (such as a message or | |
| status update), include that person's image using | |
| {@link android.app.Notification.Builder#setLargeIcon setLargeIcon()}. Also attach information about | |
| the person to the notification's metadata (see {@link android.app.Notification#EXTRA_PEOPLE}).</p> | |
| <p>Your notification's main icon is still shown, so the user can associate | |
| it with the icon | |
| visible in the status bar.</p> | |
| <img src="{@docRoot}images/android-5.0/notifications/Triggered.png" | |
| alt="" width="311px"/> | |
| <p style="margin-top:10px" class="img-caption"> | |
| Notification that shows the person who triggered it and the content they sent. | |
| </p> | |
| <h3 id="navigate_to_the_right_place">Navigate to the right place</h3> | |
| <p>When the user touches the body of a notification (outside of the action | |
| buttons), open your app | |
| to the place where the user can view and act upon the data referenced in the | |
| notification. In most cases, this will be the detailed view of a single data item such as a message, | |
| but it might also be a | |
| summary view if the notification is stacked. If your app takes the | |
| user anywhere below your app's top level, insert navigation into your app's back stack so that the | |
| user can press the system back button to return to the top level. For more information, see | |
| <em>Navigation into Your App via Home Screen Widgets and Notifications</em> in the <a | |
| href="{@docRoot}design/patterns/navigation.html#into-your-app">Navigation</a> | |
| design pattern.</p> | |
| <h3 id="correctly_set_and_manage_notification_priority">Correctly set and | |
| manage notification | |
| priority</h3> | |
| <p>Android supports a priority flag for notifications. This flag allows you to | |
| influence where your notification appears, relative to other notifications, and | |
| helps ensure | |
| that users always see their most important notifications first. You can choose | |
| from the | |
| following priority levels when posting a notification:</p> | |
| <table> | |
| <tr> | |
| <td class="tab0"> | |
| <p><strong>Priority</strong></p> | |
| </td> | |
| <td class="tab0"> | |
| <p><strong>Use</strong></p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td class="tab1"> | |
| <p><code>MAX</code></p> | |
| </td> | |
| <td class="tab1"> | |
| <p>Use for critical and urgent notifications that alert the user to a condition | |
| that is | |
| time-critical or needs to be resolved before they can continue with a | |
| particular task.</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td class="tab1"> | |
| <p><code>HIGH</code></p> | |
| </td> | |
| <td class="tab1"> | |
| <p>Use primarily for important communication, such as message or chat | |
| events with content that is particularly interesting for the user. | |
| High-priority notifications trigger the heads-up notification display.</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td class="tab1"> | |
| <p><code>DEFAULT</code></p> | |
| </td> | |
| <td class="tab1"> | |
| <p>Use for all notifications that don't fall into any of the other priorities described here.</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td class="tab1"> | |
| <p><code>LOW</code></p> | |
| </td> | |
| <td class="tab1"> | |
| <p>Use for notifications that you want the user to be informed about, but | |
| that are less urgent. Low-priority notifications tend to show up at the bottom of the list, | |
| which makes them a good | |
| choice for things like public or undirected social updates: The user has asked to | |
| be notified about | |
| them, but these notifications should never take precedence over urgent or direct | |
| communication.</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td class="tab1"> | |
| <p><code>MIN</code></p> | |
| </td> | |
| <td class="tab1"> | |
| <p>Use for contextual or background information such as weather information or contextual | |
| location information. | |
| Minimum-priority notifications do not appear in the status bar. The user | |
| discovers them on expanding the notification shade.</p> | |
| </td> | |
| </tr> | |
| </table> | |
| <h4 id="how_to_choose_an_appropriate_priority"><strong>How to choose an | |
| appropriate | |
| priority</strong></h4> | |
| <p><code>DEFAULT</code>, <code>HIGH</code>, and <code>MAX</code> are interruptive priority levels, and risk | |
| interrupting the user | |
| in mid-activity. To avoid annoying your app's users, reserve interruptive priority levels for | |
| notifications that:</p> | |
| <ul> | |
| <li> Involve another person</li> | |
| <li> Are time-sensitive</li> | |
| <li> Might immediately change the user's behavior in the real world</li> | |
| </ul> | |
| <p>Notifications set to <code>LOW</code> and <code>MIN</code> can still be | |
| valuable for the user: Many, if not most, notifications just don't need to command the user's | |
| immediate attention, or vibrate the user's wrist, yet contain information that the user will find | |
| valuable when they choose to | |
| look for notifications. Criteria for <code>LOW</code> and <code>MIN</code> | |
| priority notifications include:</p> | |
| <ul> | |
| <li> Don't involve other people</li> | |
| <li> Aren't time sensitive</li> | |
| <li> Contain content the user might be interested in but could choose to | |
| browse at their leisure</li> | |
| </ul> | |
| <img | |
| src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" | |
| alt="" width="700"/> | |
| <h3 style="clear:both" id="set_a_notification_category">Set a notification | |
| category</h3> | |
| <p>If your notification falls into one of the predefined categories (see | |
| below), assign it | |
| accordingly. Aspects of the system UI such as the notification shade (or any | |
| other notification | |
| listener) may use this information to make ranking and filtering decisions.</p> | |
| <table> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p> | |
| </td> | |
| <td> | |
| <p>Incoming call (voice or video) or similar synchronous communication | |
| request</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p> | |
| </td> | |
| <td> | |
| <p>Incoming direct message (SMS, instant message, etc.)</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p> | |
| </td> | |
| <td> | |
| <p>Asynchronous bulk message (email)</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p> | |
| </td> | |
| <td> | |
| <p>Calendar event</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p> | |
| </td> | |
| <td> | |
| <p>Promotion or advertisement</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p> | |
| </td> | |
| <td> | |
| <p>Alarm or timer</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p> | |
| </td> | |
| <td> | |
| <p>Progress of a long-running background operation</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p> | |
| </td> | |
| <td> | |
| <p>Social network or sharing update</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p> | |
| </td> | |
| <td> | |
| <p>Error in background operation or authentication status</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p> | |
| </td> | |
| <td> | |
| <p>Media transport control for playback</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p> | |
| </td> | |
| <td> | |
| <p>System or device status update. Reserved for system use.</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p> | |
| </td> | |
| <td> | |
| <p>Indication of running background service</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p> | |
| </td> | |
| <td> | |
| <p>A specific, timely recommendation for a single thing. For example, a news | |
| app might want to | |
| recommend a news story it believes the user will want to read next.</p> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td> | |
| <p><code><a | |
| href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p> | |
| </td> | |
| <td> | |
| <p>Ongoing information about device or contextual status</p> | |
| </td> | |
| </tr> | |
| </table> | |
| <h3 id="summarize_your_notifications">Summarize your notifications</h3> | |
| <p>If a notification of a certain type is already pending when your app tries to send a new | |
| notification of the same type, combine them into a single summary notification for the app. Do not | |
| create a new object.</p> | |
| <p>A summary notification builds a summary description and allows the user to | |
| understand how many | |
| notifications of a particular kind are pending.</p> | |
| <div class="col-6"> | |
| <p><strong>Don't</strong></p> | |
| <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" | |
| alt="" width="311px" /> | |
| </div> | |
| <div> | |
| <p><strong>Do</strong></p> | |
| <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" | |
| alt="" width="311px"/> | |
| </div> | |
| <p style="clear:left; padding-top:30px; padding-bottom:20px">You can provide | |
| more detail about the individual notifications that make up a | |
| summary by using the expanded digest layout. This approach allows users to gain a | |
| better sense of which | |
| notifications are pending and if they are interesting enough to read in | |
| detail within the | |
| associated app.</p> | |
| <div class="col-6"> | |
| <img src="{@docRoot}images/android-5.0/notifications/Stack.png" | |
| style="margin-bottom:20px" | |
| alt="" width="311px" /> | |
| <p class="img-caption"> | |
| Expanded and contracted notification that is a summary (using <code>InboxStyle</code>) | |
| </p> | |
| </div> | |
| <h3 style="clear:both" id="make_notifications_optional">Make notifications | |
| optional</h3> | |
| <p>Users should always be in control of notifications. Allow the user to | |
| disable your app's | |
| notifications or change their alert properties, such as alert sound and whether | |
| to use vibration, | |
| by adding a notification settings item to your application settings.</p> | |
| <h3 id="use_distinct_icons">Use distinct icons</h3> | |
| <p>By glancing at the notification area, the user should be able to discern | |
| what kinds of | |
| notifications are currently pending.</p> | |
| <div class="figure"> | |
| <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" | |
| alt="" width="420" /> | |
| </div> | |
| <div><p><strong>Do</strong></p> | |
| <p>Look at the notification icons Android apps already provide and create | |
| notification icons for | |
| your app that are sufficiently distinct in appearance.</p> | |
| <p><strong>Do</strong></p> | |
| <p>Use the proper <a | |
| href="/design/style/iconography.html#notification">notification icon style</a> | |
| for small icons, and the Material Light | |
| <a href="/design/style/iconography.html#action-bar">action bar icon | |
| style</a> for your action | |
| icons.</p> | |
| <p ><strong>Do</strong></p> | |
| <p >Keep your icons visually simple, avoiding excessive detail that is hard to | |
| discern.</p> | |
| <div><p><strong>Don't</strong></p> | |
| <p>Place any additional alpha (dimming or fading) into your | |
| small icons and action | |
| icons; they can have anti-aliased edges, but because Android uses these | |
| icons as masks (that is, only | |
| the alpha channel is used), the image should generally be drawn at full | |
| opacity.</p> | |
| </div> | |
| <p style="clear:both"><strong>Don't</strong></p> | |
| <p>Use color to distinguish your app from others. Notification icons should | |
| only be a white-on-transparent background image.</p> | |
| <h3 id="pulse_the_notification_led_appropriately">Pulse the notification LED | |
| appropriately</h3> | |
| <p>Many Android devices contain a notification LED, which is used to keep the | |
| user informed about | |
| events while the screen is off. Notifications with a priority level of <code>MAX</code>, | |
| <code>HIGH</code>, or <code>DEFAULT</code> should | |
| cause the LED to glow, while those with lower priority (<code>LOW</code> and | |
| <code>MIN</code>) should not.</p> | |
| <p>The user's control over notifications should extend to the LED. When you use | |
| DEFAULT_LIGHTS, the | |
| LED will glow white. Your notifications shouldn't use a different | |
| color unless the | |
| user has explicitly customized it.</p> | |
| <h2 id="building_notifications_that_users_care_about">Building Notifications | |
| That Users Care About</h2> | |
| <p>To create an app that users love, it is important to design your | |
| notifications carefully. | |
| Notifications embody your app's voice, and contribute to your app's | |
| personality. Unwanted or | |
| unimportant notifications can annoy the user or make them resent how much | |
| attention the app wants | |
| from them, so use notifications judiciously.</p> | |
| <h3 id="when_to_display_a_notification">When to display a notification</h3> | |
| <p>To create an application that people enjoy using, it's important to | |
| recognize that the user's | |
| attention and focus is a resource that must be protected. While Android's | |
| notification system has | |
| been designed to minimize the impact of notifications on the user's attention, | |
| it is | |
| still important to be aware of the fact that notifications are interrupting the | |
| user's task flow. | |
| As you plan your notifications, ask yourself if they are important enough to | |
| warrant an interruption. If you are unsure, allow the user to opt into a | |
| notification using your apps notification settings, or adjust | |
| the notifications priority flag to <code>LOW</code> or <code>MIN</code> to | |
| avoid distracting the user while they are doing | |
| something else.</p> | |
| <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" | |
| alt="" width="311px" /> | |
| <p style="margin-top:10px" class="img-caption"> | |
| Examples of time-sensitive notification | |
| </p> | |
| <p>While well-behaved apps generally only speak when spoken to, a few cases | |
| do merit an app's interrupting the user with an unprompted notification.</p> | |
| <p>Use notifications primarily for <strong>time-sensitive events</strong>, especially | |
| if these synchronous events <strong>involve other people</strong>. For | |
| instance, an incoming chat | |
| is a real-time and synchronous form of communication: Another user | |
| actively waiting on your response. Calendar events are another good example of when to use a | |
| notification and grab the | |
| user's attention, because the event is imminent, and calendar events often | |
| involve other people.</p> | |
| <h3 style="clear:both" id="when_not_to_display_a_notification">When not to | |
| display a notification</h3> | |
| <div class="figure" style="margin-top:60px"> | |
| <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" | |
| alt="" width="311px" /> | |
| </div> | |
| <p>In many other cases, notifications aren't appropriate:</p> | |
| <ul> | |
| <li> Avoid notifying the user of information that is not directed | |
| specifically at them, or | |
| information that is not truly time-sensitive. For instance, the asynchronous | |
| and undirected updates | |
| flowing through a social network generally do not warrant a real-time | |
| interruption. For the users | |
| who do care about them, allow them to opt-in.</li> | |
| <li> Don't create a notification if the relevant new information is currently | |
| on screen. Instead, | |
| use the UI of the application itself to notify the user of new information | |
| directly in context. | |
| For instance, a chat application should not create system notifications while | |
| the user is actively chatting with another user.</li> | |
| <li> Don't interrupt the user for low-level technical operations, like saving | |
| or syncing information, or updating an application if the app or system can resolve the issue | |
| without involving the user.</li> | |
| <li> Don't interrupt the user to inform them of an error if it is possible | |
| for the application to recover from the error on its own without the user | |
| taking any action.</li> | |
| <li> Don't create notifications that have no true notification content and | |
| merely advertise your | |
| app. A notification should provide useful, timely, new information and should | |
| not be used | |
| merely to launch an app.</li> | |
| <li> Don't create superfluous notifications just to get your brand in front | |
| of users. | |
| Such notifications frustrate and likely alienate your audience. The | |
| best way to provide | |
| small amounts of updated information and keep them engaged | |
| with your | |
| app is to develop a widget that they can choose to place on their | |
| home screen.</li> | |
| </ul> | |
| <h2 style="clear:left" id="interacting_with_notifications">Interacting with | |
| Notifications</h2> | |
| <p>Notifications are indicated by icons in the status bar, and can be accessed | |
| by opening the | |
| notification drawer.</p> | |
| <p>Touching a notification opens the associated app to detailed content | |
| that matches the notification. | |
| Swiping left or right on a notification removes it from the drawer.</p> | |
| <h3 id="ongoing_notifications">Ongoing notifications</h3> | |
| <div class="figure" style="width:311px"> | |
| <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" | |
| alt="" width="311px" /> | |
| <p class="img-caption"> | |
| Ongoing notification due to music playback | |
| </p> | |
| </div> | |
| <p>Ongoing notifications keep users informed about an ongoing process in the | |
| background. | |
| For example, music players announce the currently playing track in the | |
| notification system and | |
| continue to do so until the user stops the playback. Ongoing notifications can also | |
| show the user | |
| feedback for longer tasks like downloading a file, or encoding a video. A user cannot manually | |
| remove an ongoing notification from the notification drawer.</p> | |
| <h3 id="ongoing_notifications">Media playback</h3> | |
| <p>In Android 5.0, the lock screen doesn't show transport controls for the deprecated | |
| {@link android.media.RemoteControlClient} class. But it <em>does</em> show notifications, so each | |
| app's playback notification is now the primary | |
| way for users to control playback from a locked state. This behavior gives apps more | |
| control over which | |
| buttons to show, and in what way, while providing a consistent experience for | |
| the user whether or not the screen is locked.</p> | |
| <h3 style="clear:both" | |
| id="dialogs_and_toasts_are_for_feedback_not_notification">Dialogs | |
| and toasts</h3> | |
| <p>Your app should not create a dialog or toast if it is not currently on | |
| screen. A dialog or toast | |
| should only be displayed as an immediate response to the user taking an action | |
| inside of your app. | |
| For further guidance on the use of dialogs and toasts, refer to | |
| <a href="/design/patterns/confirming-acknowledging.html">Confirming & Acknowledging</a>.</p> | |
| <h3>Ranking and ordering</h3> | |
| <p>Notifications are news, and so are essentially shown in | |
| reverse-chronological order, with | |
| special consideration given to the app's stated notification | |
| <a href="#correctly_set_and_manage_notification_priority">priority</a>.</p> | |
| <p>Notifications are a key part of the lock screen, and are featured prominently | |
| every | |
| time the device display comes on. Space on the lock screen is tight, so it | |
| is more important | |
| than ever to identify the most urgent or relevant notifications. For this | |
| reason, Android has a | |
| more sophisticated sorting algorithm for notifications, taking into account:</p> | |
| <ul> | |
| <li> The timestamp and application's stated priority.</li> | |
| <li> Whether the notification has recently disturbed the user with sound or | |
| vibration. (That is, | |
| if the phone just made a noise, and the user wants to know "What just | |
| happened?", the lock screen | |
| should answer that at a glance.)</li> | |
| <li> Any people attached to the notification using {@link android.app.Notification#EXTRA_PEOPLE}, | |
| and, in particular, whether they are starred contacts.</li> | |
| </ul> | |
| <p>To best take advantage of this sorting, focus on the user | |
| experience you want | |
| to create, rather than aiming for any particular spot on the list.</p> | |
| <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" | |
| alt="" width="700px" /> | |
| <p class="img-caption" style="margin-top:10px">Gmail notifications are | |
| default priority, so they | |
| normally sort below messages from an instant messaging app like Hangouts, but | |
| get a | |
| temporary bump when new messages come in. | |
| </p> | |
| <h3>On the lock screen</h3> | |
| <p>Because notifications are visible on the lock screen, user privacy is an | |
| especially | |
| important consideration. Notifications often contain sensitive information, and | |
| should not necessarily be visible | |
| to anyone who picks up the device and turns on the display.</p> | |
| <ul> | |
| <li> For devices that have a secure lock screen (PIN, pattern, or password), the interface has | |
| public and private parts. The public interface can be displayed on a secure lock screen and | |
| therefore seen by anyone. The private interface is the world behind that lock screen, and | |
| is only revealed once the user has signed into the device.</li> | |
| </ul> | |
| <h3>User control over information displayed on the secure lock screen</h3> | |
| <div class="figure" style="width:311px"> | |
| <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" | |
| srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px"/> | |
| <p class="img-caption"> | |
| Notifications on the lock screen, with contents revealed after the user unlocks the device. | |
| </p> | |
| </div> | |
| <p>When setting up a secure lock screen, the user can choose to conceal | |
| sensitive details from the secure lock screen. In this case the System UI | |
| considers the notification's <em>visibility level</em> to figure out what can | |
| safely be shown.</p> | |
| <p> To control the visibility level, call | |
| <code><a | |
| href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code>, | |
| and specify one of these values:</p> | |
| <ul> | |
| <li><code><a | |
| href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>. | |
| Shows the notification's full content. | |
| This is the system default if visibility is left unspecified.</li> | |
| <li><code><a | |
| href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>. | |
| On the lock screen, shows basic information about the existence of this notification, including its | |
| icon and the name of the app that posted it. The rest of the notification's details are not displayed. | |
| A couple of good points to keep in mind are as follows: | |
| <ul> | |
| <li> If you want to provide a different public version of your notification | |
| for the system to display on a secure lock screen, supply a replacement | |
| Notification object in the <code><a | |
| href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code> | |
| field. | |
| <li> This setting gives your app an opportunity to create a redacted version of the | |
| content that is still useful but does not reveal personal information. Consider the example of an | |
| SMS app whose notifications include the text of the SMS and the sender's name and contact icon. | |
| This notification should be <code>VISIBILITY_PRIVATE</code>, but <code>publicVersion</code> could still | |
| contain useful information like "3 new messages" without any other identifying | |
| details. | |
| </ul> | |
| </li> | |
| <li><code><a | |
| href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</A></code>. Shows only the most minimal information, excluding | |
| even the notification's icon.</li> | |
| </ul> | |
| <h2 style="clear:both" id="notifications_on_android_wear">Notifications on | |
| Android Wear</h2> | |
| <p>Notifications and their <em>actions</em> are bridged over to Wear devices by default. | |
| Developers can control which notifications bridge from the | |
| phone to the watch, | |
| and vice-versa. Developers can also control which actions bridge, as well. If | |
| your app includes | |
| actions that can't be accomplished with a single tap, either hide these actions | |
| on your Wear | |
| notification or consider hooking them up to a Wear app, thus allowing the user to | |
| finish the action on | |
| their watch.</p> | |
| <h4>Bridging notifications and actions</h4> | |
| <p>A connected device, such as a phone, can bridge notifications to a Wear device, so that the | |
| notifications are displayed there. Similarly, it can bridge actions, so that the user can act | |
| on the notifications right from the Wear device.</p> | |
| <p><strong>Bridge</strong></p> | |
| <ul> | |
| <li> New instant messages</li> | |
| <li> Single-tap actions such as +1, Like, Heart</li> | |
| </ul> | |
| <img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" | |
| height="156px" | |
| alt="" /> | |
| <p><strong>Don't bridge</strong></p> | |
| <ul> | |
| <li> Notifications of newly arrived podcasts</li> | |
| <li> Actions that map to features that aren't possible on the watch</li> | |
| </ul> | |
| <p><h4>Unique actions to define for Wear</h4></p> | |
| <p>There are some actions that you can perform only on Wear. These include the following:</p> | |
| <ul> | |
| <li> Quick lists of canned responses such as "Be right back"</li> | |
| <li> Open on the phone</li> | |
| <li> A "Comment" or "Reply" action that brings up the speech input screen</li> | |
| <li> Actions that launch Wear-specific apps</li> | |
| </ul> | |
| <img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" | |
| height="156px" | |
| alt="" /> |