summaryrefslogtreecommitdiffstats
path: root/docs/html-intl/intl/ru/design/patterns/notifications.jd
blob: db46ad5051a2f4cc584cb5b027ec549a529dd257 (plain)
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
page.title=Уведомления
page.tags="notifications","design","L"
@jd:body

  <a class="notice-developers" href="{@docRoot}training/notify-user/index.html">
  <div>
    <h3>Документация для разработчиков</h3>
    <p>Уведомление пользователя</p>
  </div>
</a>

<a class="notice-designers" href="notifications_k.html">
  <div>
    <h3>Уведомления в Android версии 4.4 и ниже</h3>
  </div>
</a>

<!-- video box -->
<a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY">
<div>
    <h3>Видеоролик</h3>
    <p>DevBytes: Уведомления в Android L Developer Preview</p>
</div>
</a>

<style>
  .col-5, .col-6, .col-7 {
    margin-left:0px;
  }
</style>

<p>Уведомления позволяют извещать пользователя о релевантных и
периодически возникающих
событиях в приложении, таких как новые сообщения в чате или события в календаре.
Систему уведомлений можно рассматривать как канал новостей, извещающий пользователя о важных
событиях по мере
их возникновения, или как журнал, ведущий хронику событий, пока пользователь не обращает на них
внимания, и синхронизируемый должным образом на всех устройствах Android этого пользователя.</p>

<h4 id="New"><strong>Новые возможности Android 5.0</strong></h4>

<p>В Android 5.0 уведомления были существенно обновлены структурно,
визуально, и функционально:</p>

<ul>
  <li>был изменен внешний вид уведомлений в соответствии с новой
темой Material Design;</li>
  <li> теперь уведомления доступны на экране блокировки, в то время как
конфиденциальная информация по-прежнему
 может быть скрыта;</li>
  <li>уведомления с высоким приоритетом, полученные при включенном устройстве, теперь имеют новый формат и называются
 уведомлениями Heads-up;</li>
  <li>уведомления синхронизируются с облаком: если удалить уведомление на одном из устройств
Android, оно будет удалено
 и на остальных устройствах.</li>
</ul>

<p class="note"><strong>Примечание.</strong> Разработка уведомлений в этой версии
Android значительно
отличается от их разработки в предыдущих версиях. Информацию о разработке уведомлений в предыдущих
версиях можно найти в разделе <a href="./notifications_k.html">Уведомления в Android версии 4.4 и ниже</a>.</p>

<h2 id="Anatomy">Структура уведомления</h2>

<p>В этом разделе описываются основные компоненты уведомления и их
отображение на устройствах различных типов.</p>

<h3 id="BaseLayout">Базовая компоновка</h3>

<p>Все уведомления имеют, как минимум, базовую компоновку, которую составляют следующие элементы.</p>

<ul>
  <li> <strong>Значок</strong> уведомления. Значок символизирует
инициирующее приложение. Он также может
  указывать на тип уведомления, если приложение генерирует уведомления нескольких
типов.</li>
  <li> <strong>Заголовок</strong> уведомления и дополнительный
<strong>текст</strong>.</li>
  <li> <strong>Временная метка</strong>.</li>
</ul>

<p>Уведомления, созданные с помощью {@link android.app.Notification.Builder Notification.Builder}
для предыдущих версий платформы, выглядят и функционируют в Android
5.0 так же, как и прежде, за исключением незначительных стилистических отличий, вносимых
системой. Дополнительную информацию о внешнем виде и функциональности уведомлений в предыдущих версиях
Android можно найти в разделе
<a href="./notifications_k.html">Уведомления в Android версии 4.4 и ниже</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">
      Уведомление в базовой компоновке на мобильном устройстве (слева) и то же уведомление на носимом устройстве (справа)
      с фотографией пользователя и значком уведомления
    </p>
  </div>

<h3 id="ExpandedLayouts">Расширенная компоновка</h3>


<p>Разработчик может выбрать степень подробности уведомлений, генерируемых его
приложением. Уведомление может содержать первые
несколько строк сообщения или миниатюру изображения. В качестве дополнительной
информации можно предоставлять пользователю 
контекст и, &mdash;в некоторых случаях, &mdash;давать ему возможность прочитать сообщение
целиком. Чтобы переключаться
 между компактной и расширенной компоновкой, пользователь может применить жест сжатия/масштабирования или
провести пальцем по экрану.
 Для уведомлений о единичных событиях Android предоставляет
 разработчику приложения три шаблона расширенной компоновки 
(текст, входящая почта и изображения). Ниже приведены скриншоты уведомлений о единичных
событиях на мобильных устройствах (слева) 
 и на носимых устройствах (справа).</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">Действия</h3>

<p>Android поддерживает дополнительные действия, отображаемые в нижней части
уведомления.
Благодаря этому пользователи могут выполнять операции, типичные для данного
уведомления, непосредственно из него, не открывая
само приложение.
Это ускоряет взаимодействие и, вместе с операцией "провести пальцем, чтобы удалить", позволяет пользователю сосредоточиться на
важных для него уведомлениях.</p>


  <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" />



<p style="clear:both">При определении количества действий в уведомлении следует проявлять
благоразумие. Чем больше
действий предоставлено пользователю, тем выше когнитивная сложность приложения. Ограничьтесь
минимальным количеством
действий, предоставив пользователю наиболее важные и
значимые.</p>

<p>В уведомлениях отдавайте предпочтение действиям</p>

<ul>
  <li> важным, выполняемым наиболее часто и типичным для отображаемого
содержимого;
  <li> позволяющим пользователю быстрее решить задачу.
</ul>

<p>Избегайте действий</p>

<ul>
  <li> неоднозначных;
  <li> совпадающих с действиями, выполняемыми для данного уведомления по умолчанию (например, "Прочитать" или 
"Открыть").
</ul>



<p>Следует предоставлять не более трех действий, указав для каждого
значок и название.
 Добавление действий в базовую компоновку делает уведомление расширяемым,
даже если
 оно не имеет расширенной компоновки. Поскольку действия отображаются только у
расширенных
 уведомлений, необходимо, чтобы любое действие,
которое пользователь может выполнить из
 уведомления, было доступно и в соответствующем
приложении.</p>

<h2 style="clear:left">Уведомления heads-up</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">
    Пример уведомления heads-up (входящий телефонный звонок, высокий приоритет),
появляющегося поверх
    приложения с эффектом присутствия
  </p>
</div>

<p>Когда поступает уведомление с высоким приоритетом (см. изображение справа), оно в течение короткого времени
отображается
в расширенной компоновке, позволяя выполнить допустимые действия.</p>
<p> Затем уведомление принимает обычный
вид. Если для уведомления установлен высокий, максимальный или полноэкранный <a href="#correctly_set_and_manage_notification_priority">приоритет</a> 
, оно становится уведомлением heads-up.</p>

<p><b>Хорошими примерами событий для уведомлений heads-up являются</b></p>

<ul>
  <li> входящий телефонный звонок, во время использования устройства;</li>
  <li> сигнал будильника во время использования устройства;</li>
  <li> новое SMS-сообщение;</li>
  <li> низкий уровень заряда аккумулятора.</li>
</ul>

<h2 style="clear:both" id="guidelines">Основные рекомендации</h2>


<h3 id="MakeItPersonal">Персонализируете уведомление</h3>

<p>Уведомление о событии, инициированном другим пользователем (например, сообщение или
обновление статуса), должно содержать изображение пользователя, добавленное с помощью
{@link android.app.Notification.Builder#setLargeIcon setLargeIcon()}. Кроме того, в метаданные уведомления необходимо включить информацию о
пользователе (см. {@link android.app.Notification#EXTRA_PEOPLE}).</p>

<p>Главный значок уведомления будет по-прежнему отображаться, чтобы пользователь мог связать
его со значком
на строке состояния.</p>


<img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" />
<p style="margin-top:10px" class="img-caption">
  Уведомление, идентифицирующее пользователя-инициатора, и отображающее отправленное содержимое.
</p>


<h3 id="navigate_to_the_right_place">Выполняйте переход в нужное место</h3>

<p>Когда пользователь касается тела уведомления (за пределами кнопок
с действиями), должен осуществляться переход в то место приложения,
где пользователь сможет просмотреть информацию, о которой извещает уведомление, и действовать в соответствии
с нею. В большинстве случаев там будет находиться подробное представление одного элемента данных, например, сообщения,
но возможно и
сокращенное представление, если накопилось несколько уведомлений. Если приложение переводит
пользователя на какой-либо уровень, отличный от верхнего, реализуйте навигацию в стеке переходов назад в приложении, чтобы
пользователь мог нажать системную кнопку "Назад" и вернуться на верхний уровень. Дополнительную информацию можно найти в разделе
<em>Навигация внутрь приложения с помощью виджетов и уведомлений главного экрана</em> в шаблоне проектирования 
<a href="{@docRoot}design/patterns/navigation.html#into-your-app">Навигация</a>.</p>

<h3 id="correctly_set_and_manage_notification_priority">Правильно выполняйте расстановку приоритетов уведомлений и 
управление ими
</h3>

<p>Android поддерживает флаг приоритета для уведомлений. Это флаг позволяет
влиять на позицию уведомления среди других уведомлений и 
гарантировать,
что пользователь в первую очередь увидит самые важные уведомления. При отправке уведомления можно выбрать один
из
следующих уровней приоритета:</p>
<table>
 <tr>
    <td class="tab0">
<p><strong>Приоритет</strong></p>
</td>
    <td class="tab0">
<p><strong>Использование</strong></p>
</td>
 </tr>
 <tr>
    <td class="tab1">
<p><code>MAX</code></p>
</td>
    <td class="tab1">
<p>Применяйте для наиболее важных и неотложных уведомлений, извещающих пользователя
о ситуации,
критичной по времени или такой, на которую необходимо отреагировать, чтобы продолжить
выполнение задачи.</p>
</td>
 </tr>
 <tr>
    <td class="tab1">
<p><code>HIGH</code></p>
</td>
    <td class="tab1">
<p>Применяйте, в основном, для передачи важной информации, например, о сообщениях или событиях
в чате с содержимым, представляющим особый интерес для пользователя.
Уведомления с высоким приоритетом отображаются как уведомления heads-up.</p>
</td>
 </tr>
 <tr>
    <td class="tab1">
<p><code>DEFAULT</code></p>
</td>
    <td class="tab1">
<p>Применяйте для всех уведомлений, не входящих ни в одну из описанных здесь категорий.</p>
</td>
 </tr>
 <tr>
    <td class="tab1">
<p><code>LOW</code></p>
</td>
    <td class="tab1">
<p>Применяйте для уведомлений, которые должны быть переданы пользователю, но
не являются неотложными. Низкоприоритетные уведомления обычно появляются в конце списка,
что позволяет использовать их
для передачи информации, представляющей всеобщий интерес и не имеющей конкретной направленности. Например, если пользователь подписался
на новости,
 эта информация не должна иметь преимущество перед неотложными или адресными
сообщениями.</p>
</td>
 </tr>
 <tr>
    <td class="tab1">
<p><code>MIN</code></p>
</td>
    <td class="tab1">
<p>Применяйте для уведомлений, с контекстной или фоновой информацией, такой как прогноз погоды, или с информацией,
связанной с местоположением пользователя.
Уведомления с минимальным приоритетом не отображаются в строке состояния. Пользователь
обнаруживает их при раскрытии панели уведомления.</p>
</td>
 </tr>
</table>


<h4 id="how_to_choose_an_appropriate_priority"><strong>Как выбрать
подходящий
приоритет</strong></h4>

<p>При выдаче уведомлений с приоритетами <code>DEFAULT</code>, <code>HIGH</code> и <code>MAX</code> существует риск, что деятельность 
пользователя будет прервана
в самом разгаре. Чтобы не раздражать пользователей вашего приложения, применяйте приоритеты этих уровней для
уведомлений,</p>

<ul>
  <li> имеющих отношение к другим пользователям;</li>
  <li> быстро теряющих актуальность;</li>
  <li> способных немедленно повлиять на поведение пользователя в реальном мире.</li>
</ul>

<p>Уведомления с приоритетом <code>LOW</code> и <code>MIN</code> могут представлять определенную ценность
для пользователя. Значительное количество, если не большинство, уведомлений не требует немедленной
реакции пользователя,  но, тем не менее, содержит информацию, которую пользователь сочтет
ценной, когда решит
просмотреть поступившие уведомления. Приоритеты уровней <code>LOW</code> и <code>MIN</code>
 следует присваивать уведомлениям,</p>

<ul>
  <li> не имеющим прямого отношения к другим пользователям;</li>
  <li> долго не теряющим актуальность;</li>
  <li> содержащим информацию, способную заинтересовать пользователя, если он решит
просмотреть их в свободное время.</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">Определите категорию
уведомления</h3>

<p>Если уведомление попадает в одну из заранее определенных категорий (см.
ниже), укажите его
категорию.  Процессы системного пользовательского интерфейса, например, панель уведомления (или любой
другой процесс-слушатель
уведомлений) могут воспользоваться этой информацией при классификации и фильтрации уведомлений.</p>
<table>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p>
</td>
    <td>
<p>Входящий звонок (голосовой или по видеосвязи) или алогичный запрос синхронной 
связи</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p>
</td>
    <td>
<p>Входящее личное сообщение (SMS-сообщение, мгновенное сообщение и т. д.)</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p>
</td>
    <td>
<p>Асинхронное массовое сообщение (по электронной почте)</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p>
</td>
    <td>
<p>Событие в календаре</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p>
</td>
    <td>
<p>Промоакция или реклама</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p>
</td>
    <td>
<p>Сигнал будильника или таймера</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p>
</td>
    <td>
<p>Информация о ходе выполнения длительной фоновой операции</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p>
</td>
    <td>
<p>Новости, поступившие из социальной сети или касающиеся совместного использования ресурсов</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p>
</td>
    <td>
<p>Ошибка в фоновой операции или статусе аутентификации</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p>
</td>
    <td>
<p>Управление передачей медиаданных для воспроизведения</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p>
</td>
    <td>
<p>Обновление статуса системы или устройства.  Зарезервировано для использования системой.</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p>
</td>
    <td>
<p>Индикация работающей фоновой службы</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p>
</td>
    <td>
<p>Конкретная и привязанная ко времени рекомендация относительно одного объекта.  Например, приложение
новостей может
порекомендовать пользователю, какую новость читать следующей.</p>
</td>
 </tr>
 <tr>
    <td>
<p><code><a
href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p>
</td>
    <td>
<p>Текущая информация о статусе устройства или контекста</p>
</td>
 </tr>
</table>

<h3 id="summarize_your_notifications">Суммируйте уведомления</h3>

<p>Если при наличии ожидающего уведомления определенного типа приложение пытается отправить новое
уведомление того же типа, объедините их в одно сводное уведомление от этого приложения. Не
создавайте новый объект.</p>

<p>Сводное уведомление формирует сводное описание и дает пользователю возможность
понять, сколько
имеется ожидающих уведомлений того или иного типа.</p>

<div class="col-6">

<p><strong>Неправильно</strong></p>
  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" />
</div>

<div>
<p><strong>Правильно</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">Разработчик может сообщить
подробности об отдельных уведомлениях, образующих
 сводное, используя расширенную компоновку для резюме. Такой подход позволит пользователям
лучше разобраться, какие
уведомления ожидают прочтения, и достаточно ли они интересны, чтобы ознакомиться с ними
более подробно в
 соответствующем приложении.</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">
  Расширенное и сжатое сводное уведомление (с использованием <code>InboxStyle</code>)
  </p>
</div>

<h3 style="clear:both" id="make_notifications_optional">Сделайте уведомления
необязательными</h3>

<p>В распоряжении пользователей всегда должен быть метод управления уведомлениями. Предоставьте пользователю возможность
отключать уведомления, поступающие от вашего приложения,
или изменять способы оповещения, такие как звуковой сигнал и
вибрация.
 С этой целью следует предусмотреть пункт настройки уведомлений в настройках приложения.</p>

<h3 id="use_distinct_icons">Используйте отчетливые значки</h3>
<p>Беглого взгляда на область уведомлений должно быть достаточно, чтобы распознать
типы
ожидающих уведомлений.</p>

<div class="figure">
  <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" />
</div>

  <div><p><strong>Правильно</strong></p>
    <p>Рассмотрите уже существующие значки уведомлений от приложений Android и создайте
собственные,
    достаточно уникальные.</p>

    <p><strong>Правильно</strong></p>
    <p>Придерживайтесь подходящего <a href="/design/style/iconography.html#notification">стиля значков уведомления</a>
 для мелких значков, и
    <a href="/design/style/iconography.html#action-bar">стиля строки
действий</a> Material Light для значков
 действий.</p>
<p ><strong>Правильно</strong></p>
<p >Стремитесь к визуальной простоте значков, избегайте излишних трудноразличимых
деталей.</p>

  <div><p><strong>Неправильно</strong></p>
    <p>Применяйте к мелким значкам и значкам действий дополнительные альфа-эффекты
(постепенное появление/исчезание).
    К их краям может быть применено сглаживание, но, поскольку в Android эти значки
служат масками (то есть,
 используется только    альфа-канал), изображение, как правило, должно отображаться полностью
непрозрачным.</p>

</div>
<p style="clear:both"><strong>Неправильно</strong></p>

<p>Чтобы ваше приложение отличалось от других, используйте цвет. Значки уведомлений должны
представлять собой изображение белого цвета на прозрачном фоне.</p>


<h3 id="pulse_the_notification_led_appropriately">Правильно используйте индикатор 
уведомлений</h3>

<p>На многих устройствах Android имеется светодиодный индикатор уведомлений,
информирующий пользователя о
событиях, когда экран выключен. Уведомления с приоритетом <code>MAX</code>,
<code>HIGH</code> или <code>DEFAULT</code> должны
вызывать свечение индикатора, а уведомления с низким приоритетом (<code>LOW</code> и
<code>MIN</code>) не должны.</p>

<p>Возможности пользователя управлять уведомлениями должны распространяться на светодиодный индикатор. Когда разработчик использует
DEFAULT_LIGHTS, 
индикатор светится белым цветом. Ваши уведомления не должны вызывать свечение другим
цветом, если
пользователь не указал этого явным образом.</p>

<h2 id="building_notifications_that_users_care_about">Создание уведомлений,
 важных для пользователя</h2>

<p>Чтобы пользователям понравилось ваше приложение, необходимо тщательно
продумать его уведомления.
Уведомления — это голос приложения. Они определяют его
индивидуальность. Ненужные или
несущественные уведомления раздражают пользователя и заставляют его возмущаться тем, как много
внимания требует от него
приложение. Поэтому необходимо применять уведомления взвешенно.</p>

<h3 id="when_to_display_a_notification">Ситуации, в которых следует показывать уведомления</h3>

<p>Чтобы создать приложение, от работы с которым пользователи получат удовольствие, необходимо
осознать, что внимание пользователя
 является ресурсом, требующим бережного обращения. Система уведомлений
Android была разработана
так, чтобы как можно меньше отвлекать пользователя.
Однако
вы должны отдавать себе отчет в том, что уведомления прерывают
деятельность пользователя.
Планируя уведомления, спрашивайте себя, достаточно ли они важны, чтобы
послужить основанием для такого прерывания. В случае сомнений предоставьте пользователю возможность запросить
в настройках приложения получение уведомления или измените
приоритет уведомления на <code>LOW</code> или <code>MIN</code>, чтобы
не отвлекать пользователя от
текущих занятий.</p>

  <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" />
  <p style="margin-top:10px" class="img-caption">
   Примеры уведомлений, быстро теряющих актуальность
  </p>

<p>Хотя правильно работающие приложения ведут себя неназойливо, бывают ситуации,
заслуживающие того, чтобы приложение по своей инициативе прервало деятельность пользователя уведомлением.</p>

<p>Отправляйте уведомления только в случае <strong>событий, требующих неотложной реакции</strong>, особенно
 если эти синхронные события <strong>имеют прямое отношение к другим пользователям</strong>. Например,
чат
 представляет собой форму синхронного общения в реальном времени, — другой пользователь
с нетерпением ожидает вашего ответа. События в календаре являются еще одним хорошим примером ситуации, в которой следует выдать
уведомление и завладеть
  вниманием пользователя, потому что в приближающееся календарное событие часто
вовлечены другие люди.</p>

<h3 style="clear:both" id="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>В большинстве остальных случаев уведомления неуместны.</p>

<ul>
  <li> Не следует извещать пользователя о событиях, не имеющих отношения
к нему конкретно, или
  не теряющих актуальность со временем. Например, асинхронные
и безадресные новости,
  циркулирующие в социальных сетях, как правило, не требуют немедленного
привлечения внимания. Пользователям,
  действительно интересующимся таким новостями, предоставьте возможность запросить соответствующие уведомления.</li>
  <li> Не генерируйте уведомление, если релевантная свежая информация уже находится
на экране. Вместо этого
  воспользуйтесь интерфейсом самого приложения, чтобы донести до пользователя новую информацию
непосредственно в контексте.
  Например, приложение-чат не должно генерировать системные уведомления,
пока пользователь активно общается с собеседником.</li>
  <li> Не отвлекайте пользователя ради низкоуровневых технических действий, такие как сохранение
или синхронизация информации или обновление приложения, если приложение или система способны выполнить задачу
без вмешательства пользователя.</li>
  <li> Не отвлекайте пользователя, чтобы проинформировать его об ошибке, если
приложение может восстановиться после нее самостоятельно, не требуя от пользователя
никаких действий.</li>
  <li> Не создавайте уведомления, не имеющие осмысленного содержимого и 
всего лишь рекламирующие ваше
приложение. Уведомление должно нести полезную, актуальную и новую информацию. Не следует
использовать его
  исключительно для презентации приложения.</li>
  <li> Не создавайте избыточные уведомления только для того, чтобы продемонстрировать свой бренд
пользователям.
  Такие уведомления раздражают и отталкивают аудиторию. Лучший
способ сообщать
  новую информацию небольшими порциями и поддерживать связь пользователей
с вашим
 приложением заключается в том, чтобы разработать виджет, который они смогут поместить на
 главный экран.</li>
</ul>

<h2 style="clear:left" id="interacting_with_notifications">Взаимодействие с
уведомлениями</h2>

<p>Уведомления обозначаются значками в строке состояния. Чтобы получить к ним доступ,
следует открыть
панель уведомлений.</p>

<p>Если коснуться уведомления, откроется соответствующее приложение с подробным содержимым,
связанным с эти уведомлением.
Если провести пальцем по уведомлению влево или вправо, оно будет удалено из панели.</p>

<h3 id="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">
    Постоянные уведомления при воспроизведении музыки
  </p>
</div>
<p>Постоянные уведомления информируют пользователя о текущих фоновых
процессах.
Например, плееры сообщают через систему уведомлений информацию о дорожке,
воспроизводимой в данный момент, и
это продолжается, пока пользователь не остановит воспроизведение. Кроме того, постоянные уведомления могут
информировать пользователя
о ходе выполнения длительных задач, таких как загрузка файла или кодирование видеоданных. Пользователь не может вручную
удалить постоянное уведомление из панели уведомлений.</p>

<h3 id="ongoing_notifications">Воспроизведение медиаданных</h3>
<p>В Android 5.0 на экране блокировки не отображаются элементы управления воспроизведением от устаревшего
класса {@link android.media.RemoteControlClient}. Однако на нем <em>отображаются</em> уведомления, так что теперь каждое
уведомление приложения о воспроизведении является для пользователей основным
способом управления воспроизведением в заблокированном состоянии. В результате у приложения появляется больше возможностей
управлять тем, какие
кнопки отображать, и каким образом. При этом с точки зрения пользователя система ведет себя непротиворечиво,
независимо от того, заблокирован ли экран.</p>

<h3 style="clear:both"
id="dialogs_and_toasts_are_for_feedback_not_notification">Диалоговые окна
и всплывающие уведомления</h3>

<p>Приложение, не отображаемое на экране, не должно генерировать диалоговое окно или всплывающее
уведомление. Диалоговое окно или всплывающее уведомление
 должно появляться исключительно в качестве немедленной реакции на действия пользователя
в приложении.
Более подробные рекомендации по использованию диалоговых окон и всплывающих уведомлений см. в разделе
<a href="/design/patterns/confirming-acknowledging.html">Подтверждение и уведомление</a>.</p>

<h3>Упорядочение уведомлений по степени важности</h3>

<p>По своей сути уведомления — это новости, и поэтому они принципиально отображаются в
обратном хронологическом порядке.
При этом обязательно принимается во внимание
<a href="#correctly_set_and_manage_notification_priority">приоритет</a>, установленный приложением.</p>

<p>Уведомления являются важной составляющей экрана блокировки и отображаются на видном месте
каждый
раз, когда включается дисплей устройства. На экране блокировки мало свободного места, поэтому
исключительно важно
выявлять неотложные или наиболее релевантные уведомления. По этой
причине Android применяет
сложный алгоритм сортировки уведомлений, в котором учитываются</p>

<ul>
  <li> временная метка и приоритет, установленный приложением;</li>
  <li> тот факт, что уведомление только что оповестило пользователя звуковым сигналом
или вибрацией (иными словами,
 если телефон издает звуки, и пользователь хочет узнать, в чем
дело, то на экране блокировки
  должен находиться ответ, понятный с первого взгляда);</li>
  <li> пользователи, связанные с уведомлением при помощи {@link android.app.Notification#EXTRA_PEOPLE},
 и, в частности, присутствие их в списке помеченных контактов.</li>
</ul>

<p>Чтобы воспользоваться преимуществами этой сортировки наилучшим образом, думайте в первую очередь о создании
удобных условий для
пользователя, и не нацеливайтесь на конкретное место в рейтинге.</p>

  <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" />

  <p class="img-caption" style="margin-top:10px">Уведомления от Gmail имеют
приоритет DEFAULT, поэтому они
  обычно оказываются ниже уведомлений от приложений мгновенного обмена сообщениями, таких как Hangouts, но
поднимаются в списке
 на некоторое время, когда поступают новые сообщения.
  </p>


<h3>Уведомления на экране блокировки</h3>

<p>Поскольку уведомления видны на экране блокировки, защита конфиденциальной информации пользователей приобретает
особо
важное значение. Уведомления нередко содержат частную информацию, и они
не должны быть доступны
каждому, кто взял в руки устройство и включил дисплей.</p>

<ul>
  <li> У устройств, экран блокировки которых защищен (при помощи PIN-кода, графического ключа или пароля), интерфейс имеет
 общедоступную и закрытую части. Элементы общедоступного интерфейса отображаются на защищенном экране блокировки и
 следовательно, видны всем. Закрытый интерфейс находится "позади" экрана блокировки и
  доступен только пользователю, выполнившему вход в устройство.</li>
</ul>

<h3>Возможности пользователя контролировать информацию, отображаемую на экране блокировки</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">
    Уведомления на экране блокировки с содержимым, отображаемым после того, как пользователь разблокирует устройство.
  </p>
</div>

<p>При настройке защиты экрана блокировки пользователь может предпочесть,
 чтобы конфиденциальные данные не отображались на защищенном экране блокировки. В этом случае системный пользовательский интерфейс
учитывает <em>уровень видимости</em> уведомления, чтобы выяснить, какую информацию
можно отображать без риска.</p>
<p> Чтобы установить уровень видимости, вызовите 
<code><a
href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code>
и укажите одно из следующих значений:</p>

<ul>
  <li><code><a
href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>.
Содержимое уведомления отображается полностью.
  Это значение принимается системой по умолчанию, если уровень видимости не указан.</li>
  <li><code><a
href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>.
На экране блокировки отображается основная информация о наличии уведомления, включая его
значок и название приложения, отправившего его. Прочие данные уведомления скрыты.
Здесь уместно дать разработчику пару рекомендаций.
  <ul>
    <li> Если вы хотите реализовать отдельную общедоступную версию уведомления,
которую система будет отображать на экране блокировки, создайте замещающий
объект Notification в поле<code><a
href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code>.

    <li> Этот параметр предоставляет приложению возможность создавать "цензурированную" версию
содержимого, достаточно информативную, но скрывающую личную информацию. Рассмотрим в качестве примера приложение для отправки
SMS-сообщений. Его уведомления содержат текст SMS-сообщения и имя и контактный значок отправителя.
Такое уведомление должно иметь атрибут <code>VISIBILITY_PRIVATE</code>, но его версия <code>publicVersion</code> может
содержать полезную информацию, например, "3 новых сообщения", без уточняющих
подробностей.
  </ul>
  </li>
  <li><code><a
href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>. Отображается минимум информации,
даже без значка уведомления.</li>
</ul>
<h2 style="clear:both" id="notifications_on_android_wear">Уведомления на
Android Wear</h2>

<p>По умолчанию уведомления и их <em>действия</em> передаются на носимые устройства.
Разработчики могут управлять тем, какие уведомления следует передавать с
телефона на часы,
и наоборот. У разработчиков также есть возможность управлять передачей действий. Если
приложение включает в себя
действия, которые невозможно выполнить одним касанием, нужно либо скрывать их
в уведомлениях, отображаемых на носимом
устройстве, либо обеспечить их привязку к приложению под управлением Android Wear, позволив пользователю
совершать действие
на часах.</p>

<h4>Передача уведомлений и действий на другое устройство</h4>

<p>Подключенное устройство, например, телефон, может передавать уведомления на носимое устройство,
чтобы они отображались и на нем. Аналогичным образом можно передавать действия, чтобы пользователь мог реагировать
на уведомления непосредственно на носимом устройстве.</p>

<p><strong>Передавайте</strong></p>

<ul>
  <li> новые мгновенные сообщения;</li>
  <li> действия, выполняемые одним касанием, например, "+1", "Лайк", "Сердечко".</li>
</ul>

<img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" />

<p><strong>Не передавайте</strong></p>

<ul>
  <li> уведомления о новых подкастах;</li>
  <li> действия, соответствующие функциям, недоступным на часах.</li>
</ul>



<p><h4>Уникальные действия, определяемые для носимых устройств</h4></p>

<p>Некоторые действия можно выполнить только на носимых устройствах, например:</p>

<ul>
  <li> выбор из списка шаблонных ответов, например, "Скоро вернусь"</li>
  <li> действие "Открыть на телефоне";</li>
  <li> действия "Прокомментировать" или "Ответить", открывающие окно речевого ввода;</li>
  <li> действия, запускающие приложения, специфичные для Android Wear.</li>
</ul>

<img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" />