1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
|
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>
<!-- video box -->
<a class="notice-developers-video" 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="" />
|