• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1page.title=Уведомления
2page.tags="notifications","design","L"
3@jd:body
4
5  <a class="notice-developers" href="{@docRoot}training/notify-user/index.html">
6  <div>
7    <h3>Документация для разработчиков</h3>
8    <p>Уведомление пользователя</p>
9  </div>
10</a>
11
12<a class="notice-designers" href="notifications_k.html">
13  <div>
14    <h3>Уведомления в Android версии 4.4 и ниже</h3>
15  </div>
16</a>
17
18<!-- video box -->
19<a class="notice-developers-video" href="https://www.youtube.com/watch?v=Uiq2kZ2JHVY">
20<div>
21    <h3>Видеоролик</h3>
22    <p>DevBytes: Уведомления в Android L Developer Preview</p>
23</div>
24</a>
25
26<style>
27  .col-5, .col-6, .col-7 {
28    margin-left:0px;
29  }
30</style>
31
32<p>Уведомления позволяют извещать пользователя о релевантных и
33периодически возникающих
34событиях в приложении, таких как новые сообщения в чате или события в календаре.
35Систему уведомлений можно рассматривать как канал новостей, извещающий пользователя о важных
36событиях по мере
37их возникновения, или как журнал, ведущий хронику событий, пока пользователь не обращает на них
38внимания, и синхронизируемый должным образом на всех устройствах Android этого пользователя.</p>
39
40<h4 id="New"><strong>Новые возможности Android 5.0</strong></h4>
41
42<p>В Android 5.0 уведомления были существенно обновлены структурно,
43визуально, и функционально:</p>
44
45<ul>
46  <li>был изменен внешний вид уведомлений в соответствии с новой
47темой Material Design;</li>
48  <li> теперь уведомления доступны на экране блокировки, в то время как
49конфиденциальная информация по-прежнему
50 может быть скрыта;</li>
51  <li>уведомления с высоким приоритетом, полученные при включенном устройстве, теперь имеют новый формат и называются
52 уведомлениями Heads-up;</li>
53  <li>уведомления синхронизируются с облаком: если удалить уведомление на одном из устройств
54Android, оно будет удалено
55 и на остальных устройствах.</li>
56</ul>
57
58<p class="note"><strong>Примечание.</strong> Разработка уведомлений в этой версии
59Android значительно
60отличается от их разработки в предыдущих версиях. Информацию о разработке уведомлений в предыдущих
61версиях можно найти в разделе <a href="./notifications_k.html">Уведомления в Android версии 4.4 и ниже</a>.</p>
62
63<h2 id="Anatomy">Структура уведомления</h2>
64
65<p>В этом разделе описываются основные компоненты уведомления и их
66отображение на устройствах различных типов.</p>
67
68<h3 id="BaseLayout">Базовая компоновка</h3>
69
70<p>Все уведомления имеют, как минимум, базовую компоновку, которую составляют следующие элементы.</p>
71
72<ul>
73  <li> <strong>Значок</strong> уведомления. Значок символизирует
74инициирующее приложение. Он также может
75  указывать на тип уведомления, если приложение генерирует уведомления нескольких
76типов.</li>
77  <li> <strong>Заголовок</strong> уведомления и дополнительный
78<strong>текст</strong>.</li>
79  <li> <strong>Временная метка</strong>.</li>
80</ul>
81
82<p>Уведомления, созданные с помощью {@link android.app.Notification.Builder Notification.Builder}
83для предыдущих версий платформы, выглядят и функционируют в Android
845.0 так же, как и прежде, за исключением незначительных стилистических отличий, вносимых
85системой. Дополнительную информацию о внешнем виде и функциональности уведомлений в предыдущих версиях
86Android можно найти в разделе
87<a href="./notifications_k.html">Уведомления в Android версии 4.4 и ниже</a>.</p></p>
88
89
90    <img style="margin:20px 0 0 0" src="{@docRoot}images/android-5.0/notifications/basic_combo.png" alt="" width="700px" />
91
92
93<div style="clear:both;margin-top:20px">
94      <p class="img-caption">
95      Уведомление в базовой компоновке на мобильном устройстве (слева) и то же уведомление на носимом устройстве (справа)
96      с фотографией пользователя и значком уведомления
97    </p>
98  </div>
99
100<h3 id="ExpandedLayouts">Расширенная компоновка</h3>
101
102
103<p>Разработчик может выбрать степень подробности уведомлений, генерируемых его
104приложением. Уведомление может содержать первые
105несколько строк сообщения или миниатюру изображения. В качестве дополнительной
106информации можно предоставлять пользователю
107контекст и, &mdash;в некоторых случаях, &mdash;давать ему возможность прочитать сообщение
108целиком. Чтобы переключаться
109 между компактной и расширенной компоновкой, пользователь может применить жест сжатия/масштабирования или
110провести пальцем по экрану.
111 Для уведомлений о единичных событиях Android предоставляет
112 разработчику приложения три шаблона расширенной компоновки
113(текст, входящая почта и изображения). Ниже приведены скриншоты уведомлений о единичных
114событиях на мобильных устройствах (слева)
115 и на носимых устройствах (справа).</p>
116
117<img style="margin-top:30px"
118src="{@docRoot}images/android-5.0/notifications/expandedtext_combo.png"
119  alt="" width="700px" height;="284px" />
120<img style="margin-top:30px"
121src="{@docRoot}images/android-5.0/notifications/stack_combo.png"
122  alt="" width="700px" height;="284px" />
123<img style="margin-top:30px"
124src="{@docRoot}images/android-5.0/notifications/ExpandedImage.png"
125    alt="" width="311px" height;="450px" />
126
127<h3 id="actions" style="clear:both; margin-top:40px">Действия</h3>
128
129<p>Android поддерживает дополнительные действия, отображаемые в нижней части
130уведомления.
131Благодаря этому пользователи могут выполнять операции, типичные для данного
132уведомления, непосредственно из него, не открывая
133само приложение.
134Это ускоряет взаимодействие и, вместе с операцией "провести пальцем, чтобы удалить", позволяет пользователю сосредоточиться на
135важных для него уведомлениях.</p>
136
137
138  <img src="{@docRoot}images/android-5.0/notifications/action_combo.png" alt="" width="700px" />
139
140
141
142<p style="clear:both">При определении количества действий в уведомлении следует проявлять
143благоразумие. Чем больше
144действий предоставлено пользователю, тем выше когнитивная сложность приложения. Ограничьтесь
145минимальным количеством
146действий, предоставив пользователю наиболее важные и
147значимые.</p>
148
149<p>В уведомлениях отдавайте предпочтение действиям</p>
150
151<ul>
152  <li> важным, выполняемым наиболее часто и типичным для отображаемого
153содержимого;
154  <li> позволяющим пользователю быстрее решить задачу.
155</ul>
156
157<p>Избегайте действий</p>
158
159<ul>
160  <li> неоднозначных;
161  <li> совпадающих с действиями, выполняемыми для данного уведомления по умолчанию (например, "Прочитать" или
162"Открыть").
163</ul>
164
165
166
167<p>Следует предоставлять не более трех действий, указав для каждого
168значок и название.
169 Добавление действий в базовую компоновку делает уведомление расширяемым,
170даже если
171 оно не имеет расширенной компоновки. Поскольку действия отображаются только у
172расширенных
173 уведомлений, необходимо, чтобы любое действие,
174которое пользователь может выполнить из
175 уведомления, было доступно и в соответствующем
176приложении.</p>
177
178<h2 style="clear:left">Уведомления heads-up</h2>
179<div class="figure" style="width:311px">
180  <img src="{@docRoot}images/android-5.0/notifications/hun-example.png" alt="" width="311px" />
181  <p class="img-caption">
182    Пример уведомления heads-up (входящий телефонный звонок, высокий приоритет),
183появляющегося поверх
184    приложения с эффектом присутствия
185  </p>
186</div>
187
188<p>Когда поступает уведомление с высоким приоритетом (см. изображение справа), оно в течение короткого времени
189отображается
190в расширенной компоновке, позволяя выполнить допустимые действия.</p>
191<p> Затем уведомление принимает обычный
192вид. Если для уведомления установлен высокий, максимальный или полноэкранный <a href="#correctly_set_and_manage_notification_priority">приоритет</a>
193, оно становится уведомлением heads-up.</p>
194
195<p><b>Хорошими примерами событий для уведомлений heads-up являются</b></p>
196
197<ul>
198  <li> входящий телефонный звонок, во время использования устройства;</li>
199  <li> сигнал будильника во время использования устройства;</li>
200  <li> новое SMS-сообщение;</li>
201  <li> низкий уровень заряда аккумулятора.</li>
202</ul>
203
204<h2 style="clear:both" id="guidelines">Основные рекомендации</h2>
205
206
207<h3 id="MakeItPersonal">Персонализируете уведомление</h3>
208
209<p>Уведомление о событии, инициированном другим пользователем (например, сообщение или
210обновление статуса), должно содержать изображение пользователя, добавленное с помощью
211{@link android.app.Notification.Builder#setLargeIcon setLargeIcon()}. Кроме того, в метаданные уведомления необходимо включить информацию о
212пользователе (см. {@link android.app.Notification#EXTRA_PEOPLE}).</p>
213
214<p>Главный значок уведомления будет по-прежнему отображаться, чтобы пользователь мог связать
215его со значком
216на строке состояния.</p>
217
218
219<img src="{@docRoot}images/android-5.0/notifications/Triggered.png" alt="" width="311px" />
220<p style="margin-top:10px" class="img-caption">
221  Уведомление, идентифицирующее пользователя-инициатора, и отображающее отправленное содержимое.
222</p>
223
224
225<h3 id="navigate_to_the_right_place">Выполняйте переход в нужное место</h3>
226
227<p>Когда пользователь касается тела уведомления (за пределами кнопок
228с действиями), должен осуществляться переход в то место приложения,
229где пользователь сможет просмотреть информацию, о которой извещает уведомление, и действовать в соответствии
230с нею. В большинстве случаев там будет находиться подробное представление одного элемента данных, например, сообщения,
231но возможно и
232сокращенное представление, если накопилось несколько уведомлений. Если приложение переводит
233пользователя на какой-либо уровень, отличный от верхнего, реализуйте навигацию в стеке переходов назад в приложении, чтобы
234пользователь мог нажать системную кнопку "Назад" и вернуться на верхний уровень. Дополнительную информацию можно найти в разделе
235<em>Навигация внутрь приложения с помощью виджетов и уведомлений главного экрана</em> в шаблоне проектирования
236<a href="{@docRoot}design/patterns/navigation.html#into-your-app">Навигация</a>.</p>
237
238<h3 id="correctly_set_and_manage_notification_priority">Правильно выполняйте расстановку приоритетов уведомлений и
239управление ими
240</h3>
241
242<p>Android поддерживает флаг приоритета для уведомлений. Это флаг позволяет
243влиять на позицию уведомления среди других уведомлений и
244гарантировать,
245что пользователь в первую очередь увидит самые важные уведомления. При отправке уведомления можно выбрать один
246из
247следующих уровней приоритета:</p>
248<table>
249 <tr>
250    <td class="tab0">
251<p><strong>Приоритет</strong></p>
252</td>
253    <td class="tab0">
254<p><strong>Использование</strong></p>
255</td>
256 </tr>
257 <tr>
258    <td class="tab1">
259<p><code>MAX</code></p>
260</td>
261    <td class="tab1">
262<p>Применяйте для наиболее важных и неотложных уведомлений, извещающих пользователя
263о ситуации,
264критичной по времени или такой, на которую необходимо отреагировать, чтобы продолжить
265выполнение задачи.</p>
266</td>
267 </tr>
268 <tr>
269    <td class="tab1">
270<p><code>HIGH</code></p>
271</td>
272    <td class="tab1">
273<p>Применяйте, в основном, для передачи важной информации, например, о сообщениях или событиях
274в чате с содержимым, представляющим особый интерес для пользователя.
275Уведомления с высоким приоритетом отображаются как уведомления heads-up.</p>
276</td>
277 </tr>
278 <tr>
279    <td class="tab1">
280<p><code>DEFAULT</code></p>
281</td>
282    <td class="tab1">
283<p>Применяйте для всех уведомлений, не входящих ни в одну из описанных здесь категорий.</p>
284</td>
285 </tr>
286 <tr>
287    <td class="tab1">
288<p><code>LOW</code></p>
289</td>
290    <td class="tab1">
291<p>Применяйте для уведомлений, которые должны быть переданы пользователю, но
292не являются неотложными. Низкоприоритетные уведомления обычно появляются в конце списка,
293что позволяет использовать их
294для передачи информации, представляющей всеобщий интерес и не имеющей конкретной направленности. Например, если пользователь подписался
295на новости,
296 эта информация не должна иметь преимущество перед неотложными или адресными
297сообщениями.</p>
298</td>
299 </tr>
300 <tr>
301    <td class="tab1">
302<p><code>MIN</code></p>
303</td>
304    <td class="tab1">
305<p>Применяйте для уведомлений, с контекстной или фоновой информацией, такой как прогноз погоды, или с информацией,
306связанной с местоположением пользователя.
307Уведомления с минимальным приоритетом не отображаются в строке состояния. Пользователь
308обнаруживает их при раскрытии панели уведомления.</p>
309</td>
310 </tr>
311</table>
312
313
314<h4 id="how_to_choose_an_appropriate_priority"><strong>Как выбрать
315подходящий
316приоритет</strong></h4>
317
318<p>При выдаче уведомлений с приоритетами <code>DEFAULT</code>, <code>HIGH</code> и <code>MAX</code> существует риск, что деятельность
319пользователя будет прервана
320в самом разгаре. Чтобы не раздражать пользователей вашего приложения, применяйте приоритеты этих уровней для
321уведомлений,</p>
322
323<ul>
324  <li> имеющих отношение к другим пользователям;</li>
325  <li> быстро теряющих актуальность;</li>
326  <li> способных немедленно повлиять на поведение пользователя в реальном мире.</li>
327</ul>
328
329<p>Уведомления с приоритетом <code>LOW</code> и <code>MIN</code> могут представлять определенную ценность
330для пользователя. Значительное количество, если не большинство, уведомлений не требует немедленной
331реакции пользователя,  но, тем не менее, содержит информацию, которую пользователь сочтет
332ценной, когда решит
333просмотреть поступившие уведомления. Приоритеты уровней <code>LOW</code> и <code>MIN</code>
334 следует присваивать уведомлениям,</p>
335
336<ul>
337  <li> не имеющим прямого отношения к другим пользователям;</li>
338  <li> долго не теряющим актуальность;</li>
339  <li> содержащим информацию, способную заинтересовать пользователя, если он решит
340просмотреть их в свободное время.</li>
341</ul>
342
343
344  <img src="{@docRoot}images/android-5.0/notifications/notifications_pattern_priority.png" alt="" width="700" />
345
346
347<h3 style="clear:both" id="set_a_notification_category">Определите категорию
348уведомления</h3>
349
350<p>Если уведомление попадает в одну из заранее определенных категорий (см.
351ниже), укажите его
352категорию.  Процессы системного пользовательского интерфейса, например, панель уведомления (или любой
353другой процесс-слушатель
354уведомлений) могут воспользоваться этой информацией при классификации и фильтрации уведомлений.</p>
355<table>
356 <tr>
357    <td>
358<p><code><a
359href="/reference/android/app/Notification.html#CATEGORY_CALL">CATEGORY_CALL</a></code></p>
360</td>
361    <td>
362<p>Входящий звонок (голосовой или по видеосвязи) или алогичный запрос синхронной
363связи</p>
364</td>
365 </tr>
366 <tr>
367    <td>
368<p><code><a
369href="/reference/android/app/Notification.html#CATEGORY_MESSAGE">CATEGORY_MESSAGE</a></code></p>
370</td>
371    <td>
372<p>Входящее личное сообщение (SMS-сообщение, мгновенное сообщение и т. д.)</p>
373</td>
374 </tr>
375 <tr>
376    <td>
377<p><code><a
378href="/reference/android/app/Notification.html#CATEGORY_EMAIL">CATEGORY_EMAIL</a></code></p>
379</td>
380    <td>
381<p>Асинхронное массовое сообщение (по электронной почте)</p>
382</td>
383 </tr>
384 <tr>
385    <td>
386<p><code><a
387href="/reference/android/app/Notification.html#CATEGORY_EVENT">CATEGORY_EVENT</a></code></p>
388</td>
389    <td>
390<p>Событие в календаре</p>
391</td>
392 </tr>
393 <tr>
394    <td>
395<p><code><a
396href="/reference/android/app/Notification.html#CATEGORY_PROMO">CATEGORY_PROMO</a></code></p>
397</td>
398    <td>
399<p>Промоакция или реклама</p>
400</td>
401 </tr>
402 <tr>
403    <td>
404<p><code><a
405href="/reference/android/app/Notification.html#CATEGORY_ALARM">CATEGORY_ALARM</a></code></p>
406</td>
407    <td>
408<p>Сигнал будильника или таймера</p>
409</td>
410 </tr>
411 <tr>
412    <td>
413<p><code><a
414href="/reference/android/app/Notification.html#CATEGORY_PROGRESS">CATEGORY_PROGRESS</a></code></p>
415</td>
416    <td>
417<p>Информация о ходе выполнения длительной фоновой операции</p>
418</td>
419 </tr>
420 <tr>
421    <td>
422<p><code><a
423href="/reference/android/app/Notification.html#CATEGORY_SOCIAL">CATEGORY_SOCIAL</a></code></p>
424</td>
425    <td>
426<p>Новости, поступившие из социальной сети или касающиеся совместного использования ресурсов</p>
427</td>
428 </tr>
429 <tr>
430    <td>
431<p><code><a
432href="/reference/android/app/Notification.html#CATEGORY_ERROR">CATEGORY_ERROR</a></code></p>
433</td>
434    <td>
435<p>Ошибка в фоновой операции или статусе аутентификации</p>
436</td>
437 </tr>
438 <tr>
439    <td>
440<p><code><a
441href="/reference/android/app/Notification.html#CATEGORY_TRANSPORT">CATEGORY_TRANSPORT</a></code></p>
442</td>
443    <td>
444<p>Управление передачей медиаданных для воспроизведения</p>
445</td>
446 </tr>
447 <tr>
448    <td>
449<p><code><a
450href="/reference/android/app/Notification.html#CATEGORY_SYSTEM">CATEGORY_SYSTEM</a></code></p>
451</td>
452    <td>
453<p>Обновление статуса системы или устройства.  Зарезервировано для использования системой.</p>
454</td>
455 </tr>
456 <tr>
457    <td>
458<p><code><a
459href="/reference/android/app/Notification.html#CATEGORY_SERVICE">CATEGORY_SERVICE</a></code></p>
460</td>
461    <td>
462<p>Индикация работающей фоновой службы</p>
463</td>
464 </tr>
465 <tr>
466    <td>
467<p><code><a
468href="/reference/android/app/Notification.html#CATEGORY_RECOMMENDATION">CATEGORY_RECOMMENDATION</a></code></p>
469</td>
470    <td>
471<p>Конкретная и привязанная ко времени рекомендация относительно одного объекта.  Например, приложение
472новостей может
473порекомендовать пользователю, какую новость читать следующей.</p>
474</td>
475 </tr>
476 <tr>
477    <td>
478<p><code><a
479href="/reference/android/app/Notification.html#CATEGORY_STATUS">CATEGORY_STATUS</a></code></p>
480</td>
481    <td>
482<p>Текущая информация о статусе устройства или контекста</p>
483</td>
484 </tr>
485</table>
486
487<h3 id="summarize_your_notifications">Суммируйте уведомления</h3>
488
489<p>Если при наличии ожидающего уведомления определенного типа приложение пытается отправить новое
490уведомление того же типа, объедините их в одно сводное уведомление от этого приложения. Не
491создавайте новый объект.</p>
492
493<p>Сводное уведомление формирует сводное описание и дает пользователю возможность
494понять, сколько
495имеется ожидающих уведомлений того или иного типа.</p>
496
497<div class="col-6">
498
499<p><strong>Неправильно</strong></p>
500  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Dont.png" alt="" width="311px" />
501</div>
502
503<div>
504<p><strong>Правильно</strong></p>
505
506  <img src="{@docRoot}images/android-5.0/notifications/Summarise_Do.png" alt="" width="311px" />
507</div>
508
509<p style="clear:left; padding-top:30px; padding-bottom:20px">Разработчик может сообщить
510подробности об отдельных уведомлениях, образующих
511 сводное, используя расширенную компоновку для резюме. Такой подход позволит пользователям
512лучше разобраться, какие
513уведомления ожидают прочтения, и достаточно ли они интересны, чтобы ознакомиться с ними
514более подробно в
515 соответствующем приложении.</p>
516<div class="col-6">
517  <img src="{@docRoot}images/android-5.0/notifications/Stack.png" style="margin-bottom:20px" alt="" width="311px" />
518  <p class="img-caption">
519  Расширенное и сжатое сводное уведомление (с использованием <code>InboxStyle</code>)
520  </p>
521</div>
522
523<h3 style="clear:both" id="make_notifications_optional">Сделайте уведомления
524необязательными</h3>
525
526<p>В распоряжении пользователей всегда должен быть метод управления уведомлениями. Предоставьте пользователю возможность
527отключать уведомления, поступающие от вашего приложения,
528или изменять способы оповещения, такие как звуковой сигнал и
529вибрация.
530 С этой целью следует предусмотреть пункт настройки уведомлений в настройках приложения.</p>
531
532<h3 id="use_distinct_icons">Используйте отчетливые значки</h3>
533<p>Беглого взгляда на область уведомлений должно быть достаточно, чтобы распознать
534типы
535ожидающих уведомлений.</p>
536
537<div class="figure">
538  <img src="{@docRoot}images/android-5.0/notifications/ProductIcons.png" alt="" width="420" />
539</div>
540
541  <div><p><strong>Правильно</strong></p>
542    <p>Рассмотрите уже существующие значки уведомлений от приложений Android и создайте
543собственные,
544    достаточно уникальные.</p>
545
546    <p><strong>Правильно</strong></p>
547    <p>Придерживайтесь подходящего <a href="/design/style/iconography.html#notification">стиля значков уведомления</a>
548 для мелких значков, и
549    <a href="/design/style/iconography.html#action-bar">стиля строки
550действий</a> Material Light для значков
551 действий.</p>
552<p ><strong>Правильно</strong></p>
553<p >Стремитесь к визуальной простоте значков, избегайте излишних трудноразличимых
554деталей.</p>
555
556  <div><p><strong>Неправильно</strong></p>
557    <p>Применяйте к мелким значкам и значкам действий дополнительные альфа-эффекты
558(постепенное появление/исчезание).
559    К их краям может быть применено сглаживание, но, поскольку в Android эти значки
560служат масками (то есть,
561 используется только    альфа-канал), изображение, как правило, должно отображаться полностью
562непрозрачным.</p>
563
564</div>
565<p style="clear:both"><strong>Неправильно</strong></p>
566
567<p>Чтобы ваше приложение отличалось от других, используйте цвет. Значки уведомлений должны
568представлять собой изображение белого цвета на прозрачном фоне.</p>
569
570
571<h3 id="pulse_the_notification_led_appropriately">Правильно используйте индикатор
572уведомлений</h3>
573
574<p>На многих устройствах Android имеется светодиодный индикатор уведомлений,
575информирующий пользователя о
576событиях, когда экран выключен. Уведомления с приоритетом <code>MAX</code>,
577<code>HIGH</code> или <code>DEFAULT</code> должны
578вызывать свечение индикатора, а уведомления с низким приоритетом (<code>LOW</code> и
579<code>MIN</code>) не должны.</p>
580
581<p>Возможности пользователя управлять уведомлениями должны распространяться на светодиодный индикатор. Когда разработчик использует
582DEFAULT_LIGHTS,
583индикатор светится белым цветом. Ваши уведомления не должны вызывать свечение другим
584цветом, если
585пользователь не указал этого явным образом.</p>
586
587<h2 id="building_notifications_that_users_care_about">Создание уведомлений,
588 важных для пользователя</h2>
589
590<p>Чтобы пользователям понравилось ваше приложение, необходимо тщательно
591продумать его уведомления.
592Уведомления — это голос приложения. Они определяют его
593индивидуальность. Ненужные или
594несущественные уведомления раздражают пользователя и заставляют его возмущаться тем, как много
595внимания требует от него
596приложение. Поэтому необходимо применять уведомления взвешенно.</p>
597
598<h3 id="when_to_display_a_notification">Ситуации, в которых следует показывать уведомления</h3>
599
600<p>Чтобы создать приложение, от работы с которым пользователи получат удовольствие, необходимо
601осознать, что внимание пользователя
602 является ресурсом, требующим бережного обращения. Система уведомлений
603Android была разработана
604так, чтобы как можно меньше отвлекать пользователя.
605Однако
606вы должны отдавать себе отчет в том, что уведомления прерывают
607деятельность пользователя.
608Планируя уведомления, спрашивайте себя, достаточно ли они важны, чтобы
609послужить основанием для такого прерывания. В случае сомнений предоставьте пользователю возможность запросить
610в настройках приложения получение уведомления или измените
611приоритет уведомления на <code>LOW</code> или <code>MIN</code>, чтобы
612не отвлекать пользователя от
613текущих занятий.</p>
614
615  <img src="{@docRoot}images/android-5.0/notifications/TimeSensitive.png" alt="" width="311px" />
616  <p style="margin-top:10px" class="img-caption">
617   Примеры уведомлений, быстро теряющих актуальность
618  </p>
619
620<p>Хотя правильно работающие приложения ведут себя неназойливо, бывают ситуации,
621заслуживающие того, чтобы приложение по своей инициативе прервало деятельность пользователя уведомлением.</p>
622
623<p>Отправляйте уведомления только в случае <strong>событий, требующих неотложной реакции</strong>, особенно
624 если эти синхронные события <strong>имеют прямое отношение к другим пользователям</strong>. Например,
625чат
626 представляет собой форму синхронного общения в реальном времени, — другой пользователь
627с нетерпением ожидает вашего ответа. События в календаре являются еще одним хорошим примером ситуации, в которой следует выдать
628уведомление и завладеть
629  вниманием пользователя, потому что в приближающееся календарное событие часто
630вовлечены другие люди.</p>
631
632<h3 style="clear:both" id="when_not_to_display_a_notification">Ситуации,
633в которых не следует показывать уведомления</h3>
634
635<div class="figure" style="margin-top:60px">
636  <img src="{@docRoot}images/android-5.0/notifications/AntiSample1.png" alt="" width="311px" />
637</div>
638
639<p>В большинстве остальных случаев уведомления неуместны.</p>
640
641<ul>
642  <li> Не следует извещать пользователя о событиях, не имеющих отношения
643к нему конкретно, или
644  не теряющих актуальность со временем. Например, асинхронные
645и безадресные новости,
646  циркулирующие в социальных сетях, как правило, не требуют немедленного
647привлечения внимания. Пользователям,
648  действительно интересующимся таким новостями, предоставьте возможность запросить соответствующие уведомления.</li>
649  <li> Не генерируйте уведомление, если релевантная свежая информация уже находится
650на экране. Вместо этого
651  воспользуйтесь интерфейсом самого приложения, чтобы донести до пользователя новую информацию
652непосредственно в контексте.
653  Например, приложение-чат не должно генерировать системные уведомления,
654пока пользователь активно общается с собеседником.</li>
655  <li> Не отвлекайте пользователя ради низкоуровневых технических действий, такие как сохранение
656или синхронизация информации или обновление приложения, если приложение или система способны выполнить задачу
657без вмешательства пользователя.</li>
658  <li> Не отвлекайте пользователя, чтобы проинформировать его об ошибке, если
659приложение может восстановиться после нее самостоятельно, не требуя от пользователя
660никаких действий.</li>
661  <li> Не создавайте уведомления, не имеющие осмысленного содержимого и
662всего лишь рекламирующие ваше
663приложение. Уведомление должно нести полезную, актуальную и новую информацию. Не следует
664использовать его
665  исключительно для презентации приложения.</li>
666  <li> Не создавайте избыточные уведомления только для того, чтобы продемонстрировать свой бренд
667пользователям.
668  Такие уведомления раздражают и отталкивают аудиторию. Лучший
669способ сообщать
670  новую информацию небольшими порциями и поддерживать связь пользователей
671с вашим
672 приложением заключается в том, чтобы разработать виджет, который они смогут поместить на
673 главный экран.</li>
674</ul>
675
676<h2 style="clear:left" id="interacting_with_notifications">Взаимодействие с
677уведомлениями</h2>
678
679<p>Уведомления обозначаются значками в строке состояния. Чтобы получить к ним доступ,
680следует открыть
681панель уведомлений.</p>
682
683<p>Если коснуться уведомления, откроется соответствующее приложение с подробным содержимым,
684связанным с эти уведомлением.
685Если провести пальцем по уведомлению влево или вправо, оно будет удалено из панели.</p>
686
687<h3 id="ongoing_notifications">Постоянные уведомления</h3>
688<div class="figure" style="width:311px">
689  <img src="{@docRoot}images/android-5.0/notifications/MusicPlayback.png" alt="" width="311px" />
690      <p class="img-caption">
691    Постоянные уведомления при воспроизведении музыки
692  </p>
693</div>
694<p>Постоянные уведомления информируют пользователя о текущих фоновых
695процессах.
696Например, плееры сообщают через систему уведомлений информацию о дорожке,
697воспроизводимой в данный момент, и
698это продолжается, пока пользователь не остановит воспроизведение. Кроме того, постоянные уведомления могут
699информировать пользователя
700о ходе выполнения длительных задач, таких как загрузка файла или кодирование видеоданных. Пользователь не может вручную
701удалить постоянное уведомление из панели уведомлений.</p>
702
703<h3 id="ongoing_notifications">Воспроизведение медиаданных</h3>
704<p>В Android 5.0 на экране блокировки не отображаются элементы управления воспроизведением от устаревшего
705класса {@link android.media.RemoteControlClient}. Однако на нем <em>отображаются</em> уведомления, так что теперь каждое
706уведомление приложения о воспроизведении является для пользователей основным
707способом управления воспроизведением в заблокированном состоянии. В результате у приложения появляется больше возможностей
708управлять тем, какие
709кнопки отображать, и каким образом. При этом с точки зрения пользователя система ведет себя непротиворечиво,
710независимо от того, заблокирован ли экран.</p>
711
712<h3 style="clear:both"
713id="dialogs_and_toasts_are_for_feedback_not_notification">Диалоговые окна
714и всплывающие уведомления</h3>
715
716<p>Приложение, не отображаемое на экране, не должно генерировать диалоговое окно или всплывающее
717уведомление. Диалоговое окно или всплывающее уведомление
718 должно появляться исключительно в качестве немедленной реакции на действия пользователя
719в приложении.
720Более подробные рекомендации по использованию диалоговых окон и всплывающих уведомлений см. в разделе
721<a href="/design/patterns/confirming-acknowledging.html">Подтверждение и уведомление</a>.</p>
722
723<h3>Упорядочение уведомлений по степени важности</h3>
724
725<p>По своей сути уведомления — это новости, и поэтому они принципиально отображаются в
726обратном хронологическом порядке.
727При этом обязательно принимается во внимание
728<a href="#correctly_set_and_manage_notification_priority">приоритет</a>, установленный приложением.</p>
729
730<p>Уведомления являются важной составляющей экрана блокировки и отображаются на видном месте
731каждый
732раз, когда включается дисплей устройства. На экране блокировки мало свободного места, поэтому
733исключительно важно
734выявлять неотложные или наиболее релевантные уведомления. По этой
735причине Android применяет
736сложный алгоритм сортировки уведомлений, в котором учитываются</p>
737
738<ul>
739  <li> временная метка и приоритет, установленный приложением;</li>
740  <li> тот факт, что уведомление только что оповестило пользователя звуковым сигналом
741или вибрацией (иными словами,
742 если телефон издает звуки, и пользователь хочет узнать, в чем
743дело, то на экране блокировки
744  должен находиться ответ, понятный с первого взгляда);</li>
745  <li> пользователи, связанные с уведомлением при помощи {@link android.app.Notification#EXTRA_PEOPLE},
746 и, в частности, присутствие их в списке помеченных контактов.</li>
747</ul>
748
749<p>Чтобы воспользоваться преимуществами этой сортировки наилучшим образом, думайте в первую очередь о создании
750удобных условий для
751пользователя, и не нацеливайтесь на конкретное место в рейтинге.</p>
752
753  <img src="{@docRoot}images/android-5.0/notifications/AntiSample3.png" alt="" width="700px" />
754
755  <p class="img-caption" style="margin-top:10px">Уведомления от Gmail имеют
756приоритет DEFAULT, поэтому они
757  обычно оказываются ниже уведомлений от приложений мгновенного обмена сообщениями, таких как Hangouts, но
758поднимаются в списке
759 на некоторое время, когда поступают новые сообщения.
760  </p>
761
762
763<h3>Уведомления на экране блокировки</h3>
764
765<p>Поскольку уведомления видны на экране блокировки, защита конфиденциальной информации пользователей приобретает
766особо
767важное значение. Уведомления нередко содержат частную информацию, и они
768не должны быть доступны
769каждому, кто взял в руки устройство и включил дисплей.</p>
770
771<ul>
772  <li> У устройств, экран блокировки которых защищен (при помощи PIN-кода, графического ключа или пароля), интерфейс имеет
773 общедоступную и закрытую части. Элементы общедоступного интерфейса отображаются на защищенном экране блокировки и
774 следовательно, видны всем. Закрытый интерфейс находится "позади" экрана блокировки и
775  доступен только пользователю, выполнившему вход в устройство.</li>
776</ul>
777
778<h3>Возможности пользователя контролировать информацию, отображаемую на экране блокировки</h3>
779<div class="figure" style="width:311px">
780  <img src="{@docRoot}images/android-5.0/notifications/LockScreen@2x.png" srcset="{@docRoot}images/android-5.0/notifications/LockScreen.png 1x" alt="" width="311px" />
781      <p class="img-caption">
782    Уведомления на экране блокировки с содержимым, отображаемым после того, как пользователь разблокирует устройство.
783  </p>
784</div>
785
786<p>При настройке защиты экрана блокировки пользователь может предпочесть,
787 чтобы конфиденциальные данные не отображались на защищенном экране блокировки. В этом случае системный пользовательский интерфейс
788учитывает <em>уровень видимости</em> уведомления, чтобы выяснить, какую информацию
789можно отображать без риска.</p>
790<p> Чтобы установить уровень видимости, вызовите
791<code><a
792href="/reference/android/app/Notification.Builder.html#setVisibility(int)">Notification.Builder.setVisibility()</a></code>
793и укажите одно из следующих значений:</p>
794
795<ul>
796  <li><code><a
797href="/reference/android/app/Notification.html#VISIBILITY_PUBLIC">VISIBILITY_PUBLIC</a></code>.
798Содержимое уведомления отображается полностью.
799  Это значение принимается системой по умолчанию, если уровень видимости не указан.</li>
800  <li><code><a
801href="/reference/android/app/Notification.html#VISIBILITY_PRIVATE">VISIBILITY_PRIVATE</a></code>.
802На экране блокировки отображается основная информация о наличии уведомления, включая его
803значок и название приложения, отправившего его. Прочие данные уведомления скрыты.
804Здесь уместно дать разработчику пару рекомендаций.
805  <ul>
806    <li> Если вы хотите реализовать отдельную общедоступную версию уведомления,
807которую система будет отображать на экране блокировки, создайте замещающий
808объект Notification в поле<code><a
809href="/reference/android/app/Notification.html#publicVersion">Notification.publicVersion</a></code>.
810
811    <li> Этот параметр предоставляет приложению возможность создавать "цензурированную" версию
812содержимого, достаточно информативную, но скрывающую личную информацию. Рассмотрим в качестве примера приложение для отправки
813SMS-сообщений. Его уведомления содержат текст SMS-сообщения и имя и контактный значок отправителя.
814Такое уведомление должно иметь атрибут <code>VISIBILITY_PRIVATE</code>, но его версия <code>publicVersion</code> может
815содержать полезную информацию, например, "3 новых сообщения", без уточняющих
816подробностей.
817  </ul>
818  </li>
819  <li><code><a
820href="/reference/android/app/Notification.html#VISIBILITY_SECRET">Notification.VISIBILITY_SECRET</a></code>. Отображается минимум информации,
821даже без значка уведомления.</li>
822</ul>
823<h2 style="clear:both" id="notifications_on_android_wear">Уведомления на
824Android Wear</h2>
825
826<p>По умолчанию уведомления и их <em>действия</em> передаются на носимые устройства.
827Разработчики могут управлять тем, какие уведомления следует передавать с
828телефона на часы,
829и наоборот. У разработчиков также есть возможность управлять передачей действий. Если
830приложение включает в себя
831действия, которые невозможно выполнить одним касанием, нужно либо скрывать их
832в уведомлениях, отображаемых на носимом
833устройстве, либо обеспечить их привязку к приложению под управлением Android Wear, позволив пользователю
834совершать действие
835на часах.</p>
836
837<h4>Передача уведомлений и действий на другое устройство</h4>
838
839<p>Подключенное устройство, например, телефон, может передавать уведомления на носимое устройство,
840чтобы они отображались и на нем. Аналогичным образом можно передавать действия, чтобы пользователь мог реагировать
841на уведомления непосредственно на носимом устройстве.</p>
842
843<p><strong>Передавайте</strong></p>
844
845<ul>
846  <li> новые мгновенные сообщения;</li>
847  <li> действия, выполняемые одним касанием, например, "+1", "Лайк", "Сердечко".</li>
848</ul>
849
850<img src="{@docRoot}images/android-5.0/notifications/WearBasic.png" width="156px" height="156px" alt="" />
851
852<p><strong>Не передавайте</strong></p>
853
854<ul>
855  <li> уведомления о новых подкастах;</li>
856  <li> действия, соответствующие функциям, недоступным на часах.</li>
857</ul>
858
859
860
861<p><h4>Уникальные действия, определяемые для носимых устройств</h4></p>
862
863<p>Некоторые действия можно выполнить только на носимых устройствах, например:</p>
864
865<ul>
866  <li> выбор из списка шаблонных ответов, например, "Скоро вернусь"</li>
867  <li> действие "Открыть на телефоне";</li>
868  <li> действия "Прокомментировать" или "Ответить", открывающие окно речевого ввода;</li>
869  <li> действия, запускающие приложения, специфичные для Android Wear.</li>
870</ul>
871
872<img src="{@docRoot}images/android-5.0/notifications/ReplyAction.png" width="156px" height="156px" alt="" />
873