576a4b7371
Change-Id: Ib5a3f88ef5d9e580550a18d83568913d6b5d3cef
888 lines
31 KiB
Plaintext
888 lines
31 KiB
Plaintext
page.title=Notifications
|
|
page.tags="notifications","design","L"
|
|
@jd:body
|
|
|
|
<a class="notice-developers" href="{@docRoot}training/notify-user/index.html">
|
|
<div>
|
|
<h3>Developer Docs</h3>
|
|
<p>Notifying the User</p>
|
|
</div>
|
|
</a>
|
|
|
|
<a class="notice-designers" href="notifications_k.html">
|
|
<div>
|
|
<h3>Notifications in Android 4.4 and Lower</h3>
|
|
</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="" />
|