что такое уведомления в андроиде
Как правильно настроить уведомления в Android
В наши дни уведомления стали обыденностью, но для большинства пользователей эта обыденность совсем не из приятных. Чем бы вы не занимались и какой бы деловой не были, бесконечный поток уведомлений может вывести из себя любого. Да, можно легко включить режим “Не беспокоить” и это в какой-то степени решит проблему, но это решение не идеально, ведь вы можете положить телефон на стол или в сумку и забыть про него, пропустив впоследствии какое-нибудь важное уведомление. Решение у этой непростой, но насущной, проблемы есть и мы расскажем о нем в этом материале, так что, если у вас есть немного времени, то лучше потратьте его с пользой прямо сейчас, настроив свои назойливые уведомления, и живите дальше спокойно, словно буддийский монах.
Примечание: все советы по настройке уведомлений в этом материале могут быть сделаны на ОС Android версии Oreo и выше.
Блокируем ненужные категории уведомлений
Так называемые категории уведомлений были добавлены в Android Oreo, и они являются мощным инструментом для управления уведомлениями приложений. Категории уведомлений позволяют отключать определенные типы уведомлений (групповые сообщения в WhatsApp, уведомления от Google и т.д.). Блокируя ненужные категории уведомлений, вы можете быть уверены, что когда получите уведомление, это будет именно то, что вам нужно проверить.
Доступ к категориям уведомлений на Android Oreo и выше
Обратите внимание, что получить доступ к этим настройкам можно и двумя другими способами: нажать и удерживать само уведомление, когда вы его получите или несильно спайпнуть уведомление в сторону и нажать на значок шестеренки. Если вы случайно заблокировали какую-то категорию уведомлений и хотите ее вернуть, выполните действия, описанные выше.
Настраиваем поведение уведомлений
После того, как вы определились, какие уведомления вам действительно нужно получать, вы можете изменить способ их получения. По умолчанию все уведомления издают какой-то звук и всплывают в верхней части экрана. Порой такие уведомления могут отвлекать, и чтобы этого не происходило, вы можете перейти в категории уведомлений, как сказано в предыдущем пункте и перейти в пункт “Важность”.
Здесь вы можете отключить звук уведомления или оставить только всплывающее окно без звука. Таким образом, если вы ждете какого-то уведомления, вы узнаете, когда получите его, но оно не отвлечет вас неприятным звуком или всплывшим на половину экрана окном.
Меняем звуки уведомлений
Если вы привыкли и жить не можете без звуковых уведомлений, существует простой способ оптимизировать способ их получения. Установив определенный звук для важных категорий уведомлений, вы можете мгновенно понимать, когда что-то требует вашего внимания, а когда пришедшее уведомление можно смело и без последствий проигнорировать.
На этот раз нам снова понадобится зайти в категории уведомлений, как описано в первом пункте и нажать на пункт “Звук”. Теперь выберите любой рингтон, который у вас сохранен заранее или создайте свой, нажав на значок плюса в конце списка с рингтонами. Со временем вы научитесь определять виды уведомлений по одному только звуку, и если вам понравится такая концепция, вы можете применить те же настройки для входящих вызовов в приложении “Контакты”.
Учимся откладывать важные уведомления на потом
Самые важные уведомления для того и важные, что их необходимо получить и немедленно сделать то, ради чего это уведомление было инициировано. Но даже для важных уведомлений порой настает неподходящее время или, например, настроение. В таком случае уведомление можно отложить на определенный срок и, получив его повторно, наконец, ответить (или снова отложить).
Для того чтобы отложить уведомление, свайпните по нему в сторону, нажмите на значок часов и выберете время на которое хотите отложить уведомление. Таким образом, уведомлением может служить вам напоминанием.
Если у вас есть одно из устройств линейки Pixel и вы установили на него бета-версию Android Q, то у вас есть возможность попробовать новую функцию – на новых уведомлениях появляется иконка колокольчика для того, чтобы вы могли отличать свежие уведомления от тех, что томятся в строке состояния уже целую вечность.
А вы уже знакомы с этими советами? Пользуетесь уведомлениями или у вас на телефоне всегда включен «Беззвучный режим»?
Делитесь своим мнением в комментариях под этим материалом и в нашем Telegram-чате.
Как ограничить поток уведомлений на Android, не потеряв важной информации
Не можете сосредоточиться на работе или расслабиться во время просмотра любимого телешоу, потому что ваш телефон продолжает показывать вам надоедливые уведомления? Постоянно видите оповещения из социальных сетей, рекламу и новости?
Несколько простых изменений конфигурации помогут вам взять под контроль этот информационный хаос. Сегодня я расскажу, как управлять уведомлениями на телефоне или планшете Android.
Какие уведомления оставить включенными
Хотя тема этого поста – отключить уведомления, я сначала объясню, какие из них оставить. Их немного, но без них вы можете упустить что-то важное.
Ниже я подготовил полезный список:
Вы можете без проблем заблокировать все другие уведомления и даже полностью отключить их.
Узнайте, как настроить такие уведомления на смартфоне или планшете Android.
Настройка уведомлений на Android-устройствах
Есть много способов настроить систему Android. Вы можете выбрать, хотите ли вы видеть предупреждения на экране блокировки, хотите ли вы, чтобы появлялись всплывающие уведомления, хотите ли вы получать их во время сна и т.д. Всё зависит от вас.
Многие производители используют немного изменённый интерфейс, поэтому меню настроек может отличаться от устройства к устройству. Однако, основные принципы остаются прежними.
Отключить все уведомления Android
В настройках каждого смартфона есть отдельные опции для управления уведомлениями из приложения. С них стоит начать:
Многие приложения позволяют выполнять гибкую настройку уведомлений в зависимости от конкретной ситуации. Например, в приложениях для обмена сообщениями вы можете отключить оповещения канала и разрешить им появляться только в частных чатах.
Это хороший вариант для людей, у которых не установлено много приложений (или которым нечего делать в течение нескольких часов и у которых много терпения, чтобы пройтись по всем приложениям). Настройка параметров для каждого приложения может быть сложной задачей, но, в конечном итоге, она окажется наиболее подходящей для вас.
Мгновенно отключите уведомления Android
Если у вас нет времени утомительно менять настройки и бродить по лабиринту конфигурации или у вас на телефоне слишком много приложений, воспользуйтесь альтернативным вариантом.
Когда появится следующее уведомление, проведите по нему влево, вправо или вниз (в зависимости от модели вашего смартфона). Появится значок шестеренки. Коснитесь его, чтобы просмотреть настройки этого типа предупреждений для определенного приложения.
Преимущество использования этого метода в том, что вам не нужно настраивать уведомления для всех ваших приложений сразу. Таким образом, вы будете настраивать их один за другим по мере их появления.
Во многих версиях Android вы можете отложить уведомления таким же образом (чтобы не забыть о них). Например, если у вас важный разговор на платформе Zoom, но ваш телефон продолжает запрашивать обновление, и вы не знаете, насколько важно исправление и к каким приложениям оно применяется, используйте предупреждение об отсрочке.
Коснитесь уведомления и перетащите его в сторону. Рядом с появившейся шестеренкой вы увидите значок часов или колокольчика. Коснитесь его и выберите, как долго уведомление будет оставаться неактивным. Когда период сна закончится, уведомление появится снова.
Отключить звонки и уведомления
Если вы отключили все ненужные уведомления, но хотите полностью отвлечься на ближайшие несколько часов, вы можете заблокировать важные уведомления, а затем повторно активировать их в любое время. Включите режим «Не беспокоить», чтобы телефон не отображал уведомления, пока вы не вернетесь в режим по умолчанию.
Чтобы включить режим «Не беспокоить», откройте Центр уведомлений, проведя вниз от верхнего края экрана (для некоторых моделей проведите пальцем вверх). Значок «Не беспокоить» обычно выглядит как знак «Вход запрещен». Вы также можете открыть меню и ввести название этой опции в строке поиска в верхней части экрана настроек.
В настройках «Не беспокоить» вы можете отключить все звуки и отключить вибрацию. Однако? по умолчанию опция уведомления о вызове будет включена: если кто-то попытается позвонить вам дважды в течение 15 минут, вы получите уведомление о входящем вызове, и телефон будет вибрировать. Вы можете отключить эту опцию.
Вы можете настроить расписание для включения режима «Не беспокоить», например, вечером и выключения его утром. Вы также можете добавить важные уведомления, такие как звонки от выбранных людей в вашем списке контактов, в список исключений. Для этого воспользуйтесь разделом исключений режима «Не беспокоить». Например, вы найдёте будильник, который активируется автоматически независимо от активных настроек. Кроме того, вы можете удалить любой тип предупреждения из списка исключений.
Другие советы по созданию цифрового спокойствия
Помимо общих настроек Android предлагает режим фокусировки. Вы найдёте его в разделе «Цифровое благополучие» и «Родительский контроль». Вы можете использовать его, чтобы заблокировать уведомления от приложения.
В том же меню на панели инструментов вы можете увидеть, сколько времени тратите на использование каждого приложения, а также сколько уведомлений оно отправляет. Подобная статистика помогает определить, какие услуги вас больше всего отвлекают. Если вы проводите слишком много времени, просматривая сообщения, социальные сети или играя в игры, установите ограничение по времени для их использования – когда приложение не может работать, оно также не может отправлять уведомления.
Полный список
Отображение
Код создания простого уведомления выглядит так:
Используем билдер, в котором указываем иконку, заголовок и текст для уведомления. Методом build получаем готовое уведомление.
Далее используем NotificationManager и его метод notify, чтобы показать созданное уведомление. Кроме notification, требуется передать id. Это необходимо, чтобы в дальнейшем мы могли использовать этот id для обновления или удаления уведомления.
Конструктор new NotificationCompat.Builder(Context) будет помечен как Deprecated, если вы используете библиотеку appCompat версии 26 и выше. Так получилось потому, что в Android API 26 появился новый конструктор и рекомендуется использовать его. Пока не обращайте внимание на это. В одном из следующих уроков мы рассмотрим использование правильного конструктора.
Запустив этот код, мы увидим уведомление
Оно отображает иконку и два текста, которые мы указывали в билдере. Нажатие на него ни к чему не приведет, т.к. мы не реализовали обработчик нажатия. Мы это сделаем чуть позже.
Обновление
Мы отобразили уведомление и теперь хотим его обновить. Для этого нужно просто снова показать уведомление методом notify и использовать при этом тот же id.
Это будет выглядеть так:
Код полностью аналогичен коду, что мы использовали при отображении уведомления. Только в билдере используем другие тексты и иконку. Самое главное, что в методе notify мы снова используем NotificationManager по этому id найдет уведомление, которое мы отобразили чуть раньше и заменит его новым
Несколько уведомлений
Чтобы показать новое уведомление, а не обновить уже существующее, надо использовать другой id в методе notify.
Мы использовали разные id в методе notify и получили два разных уведомления
Удаление
Чтобы удалить уведомление, используем NotificationManager и его метод cancel с указанием id уведомления.
Либо методом cancelAll можем удалить все уведомления сразу
При удалении уведомления нет необходимости проверять, отображается оно или нет. Если уведомления по каким-то причинам уже нет, то просто ничего не произойдет.
Обработка нажатия
Мы будем создавать Intent для запуска, например, Activity, упаковывать этот Intent в PendingIntent и передавать PeningIntent в уведомление. По нажатию на уведомление, система достанет из него PedningIntent и использует вложенный в него Intent, чтобы запустить Activity.
Давайте посмотрим, как это выглядит на практике:
Создаем Intent для запуска Activity и упаковываем его в PedningIntent.
Подробно о PedningIntent и его параметрах вы можете почитать в Уроке 119. Там я подробно рассмотрел различные кейсы на примерах с уведомлением и вызовом BroadcastReceiver.
Созданный PendingIntent нам надо будет передать в билдер уведомления. Полный код создания уведомления будет выглядеть так:
Передаем PendingIntent в метод setContentIntent билдера уведомления.
По нажатию на уведомление откроется MainActivity
Обратите внимание, что уведомление не удаляется автоматически после нажатия на него. Чтобы исправить это, можно в билдере уведомления использовать включить параметр autoCancel
Уведомление, созданное с этим флагом будет закрываться после нажатия на него.
Билдер уведомления имеет еще несколько методов, которые могут быть полезны.
В старых версиях это выглядит так
В последних версиях он переехал в верхнюю часть уведомления
Иконка из setSmallIcon будет видна в статусбаре, когда панель уведомлений не раскрыта.
А само уведомление будет выглядеть так:
У метода три параметра:
Сначала отображаем бесконечный прогрессбар и текст Preparing. Т.е. делаем вид, что идет подготовка к выполнению операции.
Затем в отдельном потоке имитируем выполнение операции. Каждые 300 мсек увеличиваем значение progress и обновляем уведомление, чтобы прогрессбар показал текущий прогресс. А также в тексте показываем значение прогресса и максимума.
После выполнения операции скрываем прогрессбар и показываем текст Completed.
Повторюсь, очень рекомендую прочесть и понять Урок 119. В нем я подробно рассматриваю, почему PendingIntent последнего уведомления заменяет PendingIntent предыдущих уведомлений, и как этого можно избежать, используя, например, requestCode.
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Уведомления
Вступление
Кроме Toast-уведомлений, существует также другой тип уведомлений, который выводится за пределами вашего приложения, а именно, в верхней части телефона в системной строке состояния в виде значка с небольшим текстом.
Уведомление может висеть в строке состояние сколь угодно долго, пока сам пока пользователь не отреагирует на него, в отличие от Toast-сообщения, которое исчезнет через несколько секунд. В Android 5.0 добавилась возможность выводить уведомление в виде отдельного небольшого всплывающего окна (если устройство не заблокировано). В особых случаях уведомление можно выводить и на экран блокировки.
Пользователь может в настройках вашего приложения отключить уведомления в любой момент. Поэтому не стоит спамить пользователя ненужными сообщениями. Также нелишним будет проводить проверку, что уведомление будет выведено на экран.
Обратите внимание, что в имени класса спрятан кот (Notification), что намекает на целевое использование уведомлений. Уведомляйте пользователя только о самом важном, например, что пора кормить кота.
Когда пользователь открывает расширенное сообщение, Android запускает объект Intent, который определён в соответствии с уведомлением. Можно также конфигурировать уведомление с добавлением звука, вибрации и мигающих индикаторов на мобильном устройстве.
Этот вид уведомления удобен в том случае, когда приложение работает в фоновом режиме и должно уведомить пользователя о каком-либо важном событии. Фоновое приложение создаёт уведомление в строке состояния, но не запускает активность самостоятельно для получения пользовательского взаимодействия. Это должен сделать только сам пользователь в удобное ему время.
Чтобы создать уведомление в строке состояния, необходимо использовать два класса:
Показываем уведомление
Добавим на экран активности кнопку и напишем для демонстрации работы уведомления.
Для начала вам надо создать идентификатор уведомления. Он нужен, чтобы можно было различать уведомления друг от друга. Ведь вы можете создать идеальное приложение, которое уведомляло бы хозяина, что кота надо покормить (первое уведомление), погладить (второе уведомление), почистить лоток (третье уведомление). Если у вас будет один идентификатор, то каждое новое уведомление затрёт предыдущее и хозяин не увидит свои недоработки. Это не дело. Для идентификатора используйте какое-нибудь число. Только не надо оригинальничать, ничего не имею против числа 836, но вам определённо нужно сходить к психологу.
Также следует создать идентификатор канала. Каналы появились в API 26, но старые устройства будут просто игнорировать данный параметр при вызове конструктора NotificationCompat.Builder.
Далее формируется внешний вид и поведение уведомления через построитель NotificationCompat.Builder. Вы можете задать текст уведомления, значок, заголовок и прочие атрибуты. Для простого примера оставил минимальный набор настроек.
Не забывайте использовать вместо строк строковые ресурсы, пример лишь для знакомства.
Запустим пример и нажмём кнопку. В строке состояния появится значок. Раскроем уведомление и увидим текст. Уведомление можно смахнуть в сторону для удаления.
Реакция на уведомления
Нажатие на уведомление ни к чему не приведёт. Нужен дополнительный код.
Создадим новые объекты Intent и PendingIntent, которые описывают намерения и целевые действия. В нашем случае мы хотим запустить нашу активность, когда пользователь среагирует на уведомление. Присоединяем объекты через setContentIntent().
Теперь можно создать уведомление и затем закрыть приложение. Если нажать на уведомление, оно откроет заново ваше приложение.
Сделаем уведомление более красивым, добавив другие необязательные настройки.
Теперь в уведомлении мы видим картинку. Метод setTicker() выводит сообщение в строке состояния на короткое время, а затем исчезает. Это работает только на старых устройствах и сейчас можно уже не использовать.
Как я уже упоминал, если вам нужно обновить уведомление, то просто ещё раз отправьте его устройству под этим же идентификатором, но с другим текстом и картинкой.
Если уведомления разного типа, то нужно обновлять идентификаторы. Вспомним урок по подсчёту ворон и изменим код.
Теперь будут появляться новые уведомления. Обычно выводятся три значка для одного приложения (на новых устройства), потом они группируются и на экране остаётся только один значок. Проверьте самостоятельно.
Совсем не обязательно запускать своё приложение, хотя это является распространённой практикой. Можете задать нужное поведение, например, запустить свой сайт по указанному адресу. Переделаем код:
Можно вывести индикатор прогресса, чтобы указать текущий ход выполнения задачи. Можно установить бесконечное выполнение:
Удаление собственных уведомлений
Вы можете из программы удалить своё уведомление, посланное по глупости (не вздумайте удалять уведомления про кормёжку кота!).
Если уведомления с указанным идентификатором не будет, то ничего страшного при удалении не произойдёт, поэтому проверку не нужно устраивать.
Использование настроек по умолчанию
Можно добавить вибрацию, звуковой сигнал или мерцание светодиодами для ваших уведомлений при помощи настроек по умолчанию. В свойстве defaults вы можете сочетать следующие константы:
Чтобы к уведомлению добавить звук и вибрации по умолчанию, используйте код:
Если хотите установить сразу все значения по умолчанию, задействуйте константу Notification.DEFAULT_ALL.
Звуковое сопровождение
Использование звуковых оповещений для уведомления пользователя о событиях, связанных с устройством (например, входящий звонок), стало привычным. Большинство стандартных событий, от входящих звонков до новых сообщений и низкого заряда батареи, объявляются с помощью звуковых мелодий. Android позволяет проигрывать любой звуковой файл на телефоне в качестве уведомления. Чтобы это сделать, нужно присвоить свойству sound путь URI:
Также можно использовать собственный звуковой файл, загруженный на устройстве или добавленный в проект в качестве ресурса.
Виброзвонок
Вы можете использовать функцию виброзвонка в телефоне, чтобы сопровождать ваше уведомление вибрацией для привлечения внимания пользователя.
Чтобы использовать виброзвонок, передайте в свойство vibrate объекта Notification массив значений типа long. Постройте массив, учитывая, что значения, отвечающие за продолжительность вибрации (в миллисекундах), чередуются со значениями, которые означают длину паузы между вибрациями.
Прежде чем использовать виброзвонок в своем приложении, необходимо получить нужные полномочия, прописав их в манифесте:
В следующем примере показано, как изменить уведомление, чтобы одна секунда вибрации сменялась одной секундой паузы на протяжении пяти секунд:
Светодиодная индикация
Объект Notification включает в себя свойства для настройки цвета и частоты мерцания светодиодов устройства. Здесь стоит обратить внимание, что конкретные модели устройств могут не содержать светодиодные индикаторы или иметь другие цвета.
Свойство ledARGB может устанавливать цвет для светодиодной подсветки. Свойства ledOffMS и ledOnMS позволяют регулировать частоту и поведение светодиодов. Вы можете включить светодиоды, присвоив свойству ledOnMS значение 1, а ledOffMS – 0. Присвоив им обоим значения 0, светодиоды можно выключить.
Настроив работу со светодиодами, необходимо также добавить флаг FLAG_SHOW_LIGHTS к свойству flags объекта Notification.
В следующем фрагменте кода показано, как включить на устройстве красный светодиод:
Текущие и настойчивые уведомления
Вы можете делать уведомления текущими и/или настойчивыми, устанавливая флаги FLAG_INSISTENT и FLAG_ONGOING_EVENT. Уведомления, помеченные как текущие, используются для представления событий, которые выполняются в данный момент времени (например, загрузка файла, фоновое проигрывание музыки). Текущие уведомления необходимы для сервисов, работающих на переднем плане. Пример установки флагов:
В расширенной статусной строке текущие события отделены от обычных, чтобы вы сразу могли их отличить.
Настойчивые уведомления непрерывно повторяют звуковые сигналы, вибрируют и мерцают светодиодами, пока не будут остановлены. Подобные уведомления, как правило, используются для событий, которые требуют немедленного и своевременного внимания, таких как входящий звонок, срабатывание будильника или время кормёжки кота. В следующем фрагменте кода показано, как сделать уведомление настойчивым:
В методе getActivity() может понадобиться изменить флаг, например.
Существуют и другие флаги. Хотя в большинстве случаев используется просто 0.
В Android 5.0 пользователь может установить собственный уровень оповещений, нажав на кнопки увеличения громкости на домашнем экране. Появится диалоговое окно, в котором задаётся один из трёх доступных уровней.
Запустить запущенную активность
Не сразу бывает заметно, но на самом деле, когда при нажатии на уведомлении у вас запускается активность, то запускается не старая активность, которая была на экране до этого, а новая. Это можно увидеть в примере, если, например, есть текстовое поле с текстом. Введите какой-нибудь текст в активности, а потом создайте уведомление, вызывающее активность. Вы увидите, что запустится новая активность с пустыми текстовым полем, хотя мы ожидали увидеть запущенную активность. Если вам нужен именно этот вариант, то используйте флаги для намерения.
Либо вы можете прописать в манифесте для нужной активности атрибут android:launchMode=»singleTop».
Меняем цвет значка
По умолчанию, значок выводится в сером круге. Вы можете изменить цвет круга, вызвав новый метод setColor(), который появился в API 21:
Анимированный значок для уведомления
Запускаем код и создаём уведомление. Вы увидите, что в строке состояния выводится анимированный значок стрелки. Такой способ стоит использовать для действительно важных сообщений, чтобы понапрасну не раздражать пользователя.
Возможно, если вы опустите метод setTicker(), то значок уже не будет анимированным, где-то работало, где-то нет. Проверяйте самостоятельно.
Вы можете попробовать поискать другие системные анимации, например, android.R.drawable.stat_sys_download или создать собственную анимацию.
На странице http://forum.xda-developers.com/showthread.php?t=1088677 энтузиасты выложили несколько готовых примеров анимации, которые можно скачать.
Расширенные возможности уведомлений
В Android 4.1 Jelly Bean появились дополнительные возможности для уведомлений через настройку стилей.
Добавьте на экран четыре кнопки.
Уведомление с тремя кнопками
Начнём с первого варианта. Теперь в уведомлениях можно размещать до трёх кнопок. Это может быть удобным, если приложение состоит из нескольких активностей или нужно предложить три разных варианта развития сценария. За появление кнопок в уведомлении отвечает метод setAction().
Обратите внимание, что у кнопок текст может обрезаться и пользователь не увидит текст, поэтому вам следует придумать «говорящие» значки, по которым будет понятен смысл нажатия. В нашем примере при нажатии на любой из трёх кнопок запустится вторая активность.
На некоторых устройствах можно увидеть уведомление без значков и с текстом. Также были варианты, когда выводились только значки.
Уведомление с длинным текстом. BigTextStyle().bigText()
Если вы внимательно смотрели на уведомление, то могли увидеть, что длинный текст, помещённый в метод setContentText(), вывелся на экран не полностью. Если информация слишком важная и вам хочется её показать в уведомлении полностью, то подойдёт вариант со стилем BigTextStyle:
Уведомление с большой картинкой: BigPictureStyle().bigPicture()
Пример с большой картинкой аналогичен с предыдущим примером. Только мы задаём уже другой стиль для уведомления. Вместо стиля длинного текста используется стиль BigPictureStyle().bigPicture():
Слишком большая картинка будет обрезана.
Уведомление в стиле InboxStyle
Есть ещё один стиль InboxStyle, напоминающий стиль писем в папке Входящие. Стиль разместит до пяти ваших строк в виде списка. Весь код приводить не буду, меняется только вызов setStyle()
Уведомление в стиле мессенджера: MessagingStyle
Стиль MessagingStyle пригодится для отображения сообщений из мессенджера или чата. Появился в Android Nougat.
В конструкторе MessagingStyle вы должны указать имя текущего пользователя, который будет видеть свои сообщения.
У класса Person есть другие полезные методы: setIcon() (значок), setData() (картинки) и др.
В setConversationTitle() указываем название беседы, удобно при разговоре двух и более котов. В поздних версиях не имеет эффекта, можно убрать.
Разговор строится через цепочку вызовов методов addMessage(), в которых указывается текст сообщения, время, отправитель. Количество сообщений может быть любым. При большом количестве (задано в MessagingStyle.MAXIMUM_RETAINED_MESSAGES) старые сообщения начнут удаляться автоматически.
Подводя итоги, следует отметить, у уведомлений очень много методов, которые можно использовать в своём приложении. Вот как может выглядеть полный набор:
Приоритет
В API 16 появился новый метод setPriority() с константами по мере увеличения: NotificationCompat.PRIORITY_MIN, NotificationCompat.PRIORITY_LOW, NotificationCompat.PRIORITY_DEFAULT, NotificationCompat.PRIORITY_HIGH, NotificationCompat.PRIORITY_MAX.
Чем выше приоритет уведомления, тем выше он находится среди остальных уведомлений. Таким образом, важные сообщения всегда будут наверху, даже если поступили позже других менее важных сообщений. Не злоупотребляйте этой возможностью и трезво оцените важность вашего уведомления.
В Android 5.0 произошли небольшие изменения в поведении. Если установлены максимальные приоритеты Notification.PRIORITY_HIGH или Notification.MAX, то при вызове сначала уведомление появится в виде плавающего окна в верхней части экрана, а только потом закроется и останется в виде стандартного уведомления в строке состояния.
Пример изменений, которые произошли в API 23:
В уведомлениях можно использовать собственный макет, используя RemoteViews. Для стилизации макета изучите классы DecoratedCustomViewStyle и DecoratedMediaCustomViewStyle. Подключается через метод setCustomContentView().
В уведомлениях появилась возможность вводить собственный текст для ответа на какое-то сообщение. Для этого используется механизм Direct Reply, который использует RemoteInput API.
NotificationListenerService. Прослушка уведомлений
В API 18 (Android 4.3) появился новый класс NotificationListenerService, позволяющий следить за уведомлениями. С тех пор я следил за этой темой. Материал был написан по горячим следам в 2015 году. Если не работает, то разбирайтесь самостоятельно.
Новый класс является службой, которая получает сигналы от системы, когда появляются или удаляются уведомления. Таким образом вы можете отслеживать не только свои уведомления (они и так вам известны), но и уведомления от других приложений. Это может быть полезным для каких-то расширений к приложениям.
Вам нужно наследоваться от данного класса, зарегистрировать его в манифесте с разрешением BIND_NOTIFICATION_LISTENER_SERVICE и включить в него специальный фильтр намерения.
У службы есть два метода onNotificationPosted() и onNotificationRemoved() с параметром StatusBarNotification, который содержит полезные методы об уведомлении.
Пользователь должен явно разрешить приложению следить за уведомлениями через Настройки | Безопасность. Если на устройстве нет приложений, которые следят за уведомлениями, то в настройках вы не увидите никаких пунктов о разрешении. Когда вы создадите такое приложение, то там появится новый пункт Доступ к уведомлениям.
Щёлкнув на нём, вы попадёте на страницу со списком программ, желающих следить за уведомлениями. Поставим флажок у своей программы.
После этого в настройках будет указано число приложений, имеющих соответствующее разрешение.
Перейдём к практической части. Подготовим разметку из нескольких кнопок и текстовой метки для вывода информации.
Создадим новую службу.
В манифесте добавляем новый блок.
Первая кнопка запускает уведомление, чтобы увидеть, что приложение работает. Если вы хотите увидеть, как приложение следит за другими уведомлениями, то запустите Play Market и скачайте какую-нибудь игру или программу. Во время скачивания и установки генерируются уведомления. На следующем скриншоте видны уведомления от приложения Загрузки во время скачивания (com.android.providers.downloads) и от процесса установки (com.android.vending).
Вы можете программно запустить раздел с разрешением на использование службы.