- Уведомление Не Отображается В Android Studio
- 3 ответа
- Создание Канала Уведомлений
- Похожие вопросы:
- Android Push-уведомления: значок не отображается в уведомлении, вместо этого отображается Белый квадрат
- 16 ответов:
- Я действительно предлагаю следовать руководство по дизайну Google:
- Уведомления
- Вступление
- Показываем уведомление
- Реакция на уведомления
- Удаление собственных уведомлений
- Использование настроек по умолчанию
- Звуковое сопровождение
- Виброзвонок
- Светодиодная индикация
- Текущие и настойчивые уведомления
- Запустить запущенную активность
- Меняем цвет значка
- Анимированный значок для уведомления
- Расширенные возможности уведомлений
- Уведомление с тремя кнопками
- Уведомление с длинным текстом. BigTextStyle().bigText()
- Уведомление с большой картинкой: BigPictureStyle().bigPicture()
- Уведомление в стиле InboxStyle
- Уведомление в стиле мессенджера: MessagingStyle
- Приоритет
- NotificationListenerService. Прослушка уведомлений
Уведомление Не Отображается В Android Studio
Я использую Kotlin и Android Studio, чтобы попытаться отправить уведомление в тестовом приложении. Я следовал инструкциям на сайте разработчиков Android о том, как создать уведомление ( https://developer.android.com/training/notify-user/build-notification), но, похоже, я делаю что-то не так, так как мое уведомление нигде не отображается. Вот мой код:
Я действительно не знаю, чего мне не хватает, поэтому буду благодарен за любую помощь.
3 ответа
Уведомления о сообщениях GCM Cloud для моего приложения Ionic Android не появляются на главном экране моего устройства, несмотря на регистрацию уведомления в самом приложении. Я использую модуль npm node-gcm для отправки push-уведомлений. var gcm = require(‘node-gcm’); var message = new.
У меня есть уведомление в моем приложении, которое я показываю следующим образом: NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context); // Check if we’re running on Android 5.0 or higher if (Build.VERSION.SDK_INT >= 21) <.
Согласно вашему коду, вы не создаете канал уведомлений .
Канал уведомления необходим от Android Oreo и выше
Таким образом, если вы используете приложение Android O и выше устройств без канала уведомлений, ваше уведомление не будет отображаться.
Создание Канала Уведомлений
Затем создайте уведомление, используя тот же channelId при создании уведомления.
Надеюсь, это поможет.
Попробуйте этот метод, и вы сможете передавать сообщение и заголовок динамически :
попробуйте что-нибудь вроде
Ваш Logcat говорит что-то вроде:
Также взгляните на свою линию:
IF все остальное не удается создать тестовую Актвивность с помощью hello world.
А затем сделайте линию похожей на:
Не забудьте добавить это действие в свой Манифест
не должно быть точки с запятой. Котину это не нужно. Профиль-это ваш класс или системный класс?
Я пытаюсь создать пользовательское уведомление в Android, используя Xamarin.Android. Уведомление, которое я создаю, не отображается одинаково на разных устройствах. Это код, который я использую: Notification.Buider not = new Notification.Builder(this) .SetTicker(Service started).
Я пытаюсь показать уведомление через Android Auto. Уведомление действительно появляется на моем телефоне. Однако он не отображается на эмуляторе Android Auto. Это приложение media. automotvie_app_desc.xml: Этот код находится в.
Похожие вопросы:
Я не могу видеть свой ключ SHA-1 в android studio. При нажатии на подпись отчета клавиша sha-1 не отображается в консоли в Android Studio.
Недавно я сделал обновление на Android Studio, и после этого я не мог получить свое уведомление. Коды работали нормально изначально до обновления, поэтому я считаю, что проблема заключается в.
Здравствуйте, я показываю пользовательское уведомление в своем приложении android. Но проблема в том, что пользовательское уведомление не отображается. Я видел много тем, но не нашел никакого.
Уведомления о сообщениях GCM Cloud для моего приложения Ionic Android не появляются на главном экране моего устройства, несмотря на регистрацию уведомления в самом приложении. Я использую модуль npm.
У меня есть уведомление в моем приложении, которое я показываю следующим образом: NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context); // Check if we’re running on Android.
Я пытаюсь создать пользовательское уведомление в Android, используя Xamarin.Android. Уведомление, которое я создаю, не отображается одинаково на разных устройствах. Это код, который я использую.
Я пытаюсь показать уведомление через Android Auto. Уведомление действительно появляется на моем телефоне. Однако он не отображается на эмуляторе Android Auto. Это приложение media.
Я пытаюсь отобразить уведомление с firebase, когда приложение находится на переднем плане . Метод onMessageReceived вызывается, когда я нажимаю уведомление с сервера, но уведомление не отображается.
Я нахожусь на Android Studio 3.6.1, в моем приложении build.gradle у меня есть, например implementation ‘androidx.fragment:fragment-ktx:1.2.2’ Существует версия 1.2.3 с 18 марта , но подсказка об.
Я представил свое приложение в конце 2017 года в play store, и оно сработало. Затем он был построен в Eclipse году. Теперь я запускаю его в Android Studio, и тот же код не показывает никаких.
Источник
Android Push-уведомления: значок не отображается в уведомлении, вместо этого отображается Белый квадрат
мое приложение генерирует уведомление, но значок, который я установил для этого уведомления, не отображается. Вместо этого я получаю Белый квадрат.
Я попытался изменить размер png значка (размеры 720×720, 66×66, 44×44, 22×22). Любопытно, что при использовании меньших размеров Белый квадрат меньше.
я погуглил эту проблему, а также правильный способ генерации уведомлений, и из того, что я прочитал мой код должен быть правильным. К сожалению, все не так как они должно быть.
мой телефон-это Nexus 5 с Android 5.1.1. Проблема также присутствует на эмуляторах, Samsung Galaxy s4 с Android 5.0.1 и Motorola Moto G с Android 5.0.1 (оба из которых я заимствовал, и не имею прямо сейчас)
код для уведомлений следует, и два скриншота. Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать об этом.
16 ответов:
причина: для 5.0 Lollipop «значки уведомлений должны быть полностью белыми».
Если мы решим проблему с белым значком, установив целевой SDK на 20, наше приложение не будет нацелен на Android Lollipop, а это значит, что мы не можем использовать Леденец-специфические особенности.
решение для целевого Sdk 21
Если вы хотите поддерживать значки материала леденца, то сделайте прозрачные значки для леденца и выше версии. Обратиться следующий: https://design.google.com/icons/
пожалуйста, посмотрите на http://developer.android.com/design/style/iconography.html, и мы увидим, что белый стиль-это то, как уведомления должны отображаться в Android Lollipop.
в Lollipop Google также предлагает использовать цвет, который будет отображаться за белым значком уведомления. Приведи Ссылку: https://developer.android.com/about/versions/android-5.0-changes.html
реализация Notification Builder для версии ниже и выше Lollipop OS будет:
Примечание: setColor доступен только в леденец, и это влияет только к фону значка.
это решит вашу проблему полностью!!
Если вы используете Google Cloud Messaging, то эта проблема не будет решена просто изменив значок. Например, это не будет работать:
даже если ic_notification является прозрачным и белым. Он также должен быть определен в метаданных Манифеста, например:
метаданные идут под application тег, для справки.
Я действительно предлагаю следовать руководство по дизайну Google:
, который сказал «значки уведомлений должны быть полностью белый.»
объявите этот код в Манифесте Android:
Я надеюсь, что это полезно для вас.
создайте новый объект построителя уведомлений и вызовите setSmallIcon() С помощью объекта Notification builder, как в приведенном ниже коде.
создайте метод, в котором мы будем проверять, на какой версии ОС мы устанавливаем наше приложение . Если он находится ниже Lolipop I. E API 21, то он будет принимать обычный значок приложения с цветом фона иначе он будет принимать прозрачный значок приложения без фона. Таким образом, устройства, использующие версию ОС >= 21, установят фон цвет значка с помощью метода setColor() класса построителя уведомлений.
Пример Кода:
наконец-то у меня есть решение этой проблемы.
эта проблема возникает только тогда, когда приложение вообще не работает. (ни на заднем, ни на переднем плане). Когда приложение работает на переднем или заднем плане значок уведомления отображается правильно.(не белый квадрат)
Итак, мы должны установить ту же конфигурацию значка уведомления в интерфейсах API, что и в интерфейсе.
в интерфейс мы использовали Реагировать Уроженца и для уведомления толчка мы использовали react-native-FCM npm package.
мы использовали FCM-push npm package используя узел.js в качестве бэкэнда для push-уведомлений и установить структуру полезной нагрузки следующим образом.
что он в основном ищет notification_icon изображение, хранящееся локально в нашей системе Android.
Если вы хотите предоставить значок уведомления о поддержке lollipop, сделайте значок уведомления двух типов:
- обычный значок уведомления: для ниже леденец версии.
- значок уведомления с прозрачным фоном : для Lollipop и выше версии.
теперь установите соответствующий значок в Notification builder во время выполнения базы на версии ОС:
уведомления оттенков серого как объяснено ниже. Они не черно-белые, несмотря на то, что пишут другие. Вероятно, вы видели значки с несколькими оттенками, например, полосы прочности сети.
до API 21 (Lollipop 5.0) работают цветные значки. Вы можете принудительно настроить приложение на целевой API 20, но это ограничивает возможности, доступные для вашего приложения, поэтому это не рекомендуется. Можно проверить уровень API и установить значок цвет или значок оттенков серого соответственно, но это, вероятно, не стоит. В большинстве случаев лучше всего использовать значок оттенков серого.
изображения имеют четыре канала, RGBA (красный / зеленый / синий / Альфа). Для значков уведомлений Android игнорирует каналы R, G и B. Единственный канал, который имеет значение-альфа, также известный как непрозрачность. Создайте свой значок с помощью редактора, который дает вам контроль над Альфа-значением ваших цветов рисунка.
как Альфа-значения генерируют оттенки серого изображение:
- Альфа = 0 (прозрачный) — эти пиксели прозрачны, показывая цвет фона.
- Альфа = 255 (непрозрачный) — эти пиксели белые.
- альфа = 1 . 254-эти пиксели именно то, что вы ожидаете, обеспечивая оттенки между прозрачным и белым.
изменение его с setColor :
вызов NotificationCompat.Builder.setColor(int argb) . Из документации Notification.color :
цвет акцента (целое число ARGB, такое как константы в цвете), которое будет применяться стандартными шаблонами стилей при представлении этого уведомления. Текущий дизайн шаблона создает красочное изображение заголовка, накладывая изображение значка (трафарет белого цвета) поверх поля этого цвета. Альфа-компоненты игнорируются.
мое тестирование с setColor показывает, что Альфа-компоненты не игнорируется. Более высокие альфа-значения превращают пиксель белый. Более низкие Альфа-значения превращают пиксель в цвет фона (черный на моем устройстве) в области уведомлений или в указанный цвет в раскрывающемся уведомлении.
Источник
Уведомления
Вступление
Кроме Toast-уведомлений, существует также другой тип уведомлений, который выводится за пределами вашего приложения, а именно, в верхней части телефона в системной строке состояния в виде значка с небольшим текстом.
Далее пользователь должен сдвинуть строку состояния экрана, чтобы увидеть расширенную информацию об уведомлении — текст, картинку. Также можно прямо в уведомлении сделать какое-то действие — написать ответ, поставить на паузу музыку и т.п. Для привлечения внимания к уведомлению можно подключить звук и вибрацию.
Уведомление может висеть в строке состояние сколь угодно долго, пока сам пока пользователь не отреагирует на него, в отличие от Toast-сообщения, которое исчезнет через несколько секунд. В Android 5.0 добавилась возможность выводить уведомление в виде отдельного небольшого всплывающего окна (если устройство не заблокировано). В особых случаях уведомление можно выводить и на экран блокировки.
Пользователь может в настройках вашего приложения отключить уведомления в любой момент. Поэтому не стоит спамить пользователя ненужными сообщениями. Также нелишним будет проводить проверку, что уведомление будет выведено на экран.
Обратите внимание, что в имени класса спрятан кот (Notification), что намекает на целевое использование уведомлений. Уведомляйте пользователя только о самом важном, например, что пора кормить кота.
Когда пользователь открывает расширенное сообщение, Android запускает объект Intent, который определён в соответствии с уведомлением. Можно также конфигурировать уведомление с добавлением звука, вибрации и мигающих индикаторов на мобильном устройстве.
Этот вид уведомления удобен в том случае, когда приложение работает в фоновом режиме и должно уведомить пользователя о каком-либо важном событии. Фоновое приложение создаёт уведомление в строке состояния, но не запускает активность самостоятельно для получения пользовательского взаимодействия. Это должен сделать только сам пользователь в удобное ему время.
Чтобы создать уведомление в строке состояния, необходимо использовать два класса:
- Notification — определяем свойства уведомления строки состояния: значок, расширенное сообщение и дополнительные параметры настройки (звук и др.)
- NotificationManager — системный сервис Android, который управляет всеми уведомлениями. Экземпляр NotificationManager создаётся при помощи вызова метода from(), а затем, когда надо показать уведомление пользователю, вызывается метод notify()
Показываем уведомление
Добавим на экран активности кнопку и напишем для демонстрации работы уведомления.
Для начала вам надо создать идентификатор уведомления. Он нужен, чтобы можно было различать уведомления друг от друга. Ведь вы можете создать идеальное приложение, которое уведомляло бы хозяина, что кота надо покормить (первое уведомление), погладить (второе уведомление), почистить лоток (третье уведомление). Если у вас будет один идентификатор, то каждое новое уведомление затрёт предыдущее и хозяин не увидит свои недоработки. Это не дело. Для идентификатора используйте какое-нибудь число. Только не надо оригинальничать, ничего не имею против числа 836, но вам определённо нужно сходить к психологу.
Также следует создать идентификатор канала. Каналы появились в API 26, но старые устройства будут просто игнорировать данный параметр при вызове конструктора NotificationCompat.Builder.
Далее формируется внешний вид и поведение уведомления через построитель NotificationCompat.Builder. Вы можете задать текст уведомления, значок, заголовок и прочие атрибуты. Для простого примера оставил минимальный набор настроек.
Выводится уведомление с помощью метода notify() — своеобразный аналог метода show() у Toast из предыдущего урока.
Не забывайте использовать вместо строк строковые ресурсы, пример лишь для знакомства.
Запустим пример и нажмём кнопку. В строке состояния появится значок. Раскроем уведомление и увидим текст. Уведомление можно смахнуть в сторону для удаления.
Реакция на уведомления
Нажатие на уведомление ни к чему не приведёт. Нужен дополнительный код.
Создадим новые объекты Intent и PendingIntent, которые описывают намерения и целевые действия. В нашем случае мы хотим запустить нашу активность, когда пользователь среагирует на уведомление. Присоединяем объекты через setContentIntent().
// Java button.setOnClickListener(new View.OnClickListener() < @Override public void onClick(View v) < Intent notificationIntent = new Intent(MainActivity.this, MainActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(MainActivity.this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT); NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID) .setSmallIcon(R.drawable.ic_pets_black_24dp) .setContentTitle(«Напоминание») .setContentText(«Пора покормить кота») .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setContentIntent(contentIntent); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(MainActivity.this); notificationManager.notify(NOTIFY_ID, builder.build()); > >);
Теперь можно создать уведомление и затем закрыть приложение. Если нажать на уведомление, оно откроет заново ваше приложение.
Сделаем уведомление более красивым, добавив другие необязательные настройки.
Теперь в уведомлении мы видим картинку. Метод setTicker() выводит сообщение в строке состояния на короткое время, а затем исчезает. Это работает только на старых устройствах и сейчас можно уже не использовать.
Как я уже упоминал, если вам нужно обновить уведомление, то просто ещё раз отправьте его устройству под этим же идентификатором, но с другим текстом и картинкой.
Если уведомления разного типа, то нужно обновлять идентификаторы. Вспомним урок по подсчёту ворон и изменим код.
Теперь будут появляться новые уведомления. Обычно выводятся три значка для одного приложения (на новых устройства), потом они группируются и на экране остаётся только один значок. Проверьте самостоятельно.
Совсем не обязательно запускать своё приложение, хотя это является распространённой практикой. Можете задать нужное поведение, например, запустить свой сайт по указанному адресу. Переделаем код:
Можно вывести индикатор прогресса, чтобы указать текущий ход выполнения задачи. Можно установить бесконечное выполнение:
Удаление собственных уведомлений
Вы можете из программы удалить своё уведомление, посланное по глупости (не вздумайте удалять уведомления про кормёжку кота!).
Если уведомления с указанным идентификатором не будет, то ничего страшного при удалении не произойдёт, поэтому проверку не нужно устраивать.
Использование настроек по умолчанию
Можно добавить вибрацию, звуковой сигнал или мерцание светодиодами для ваших уведомлений при помощи настроек по умолчанию. В свойстве defaults вы можете сочетать следующие константы:
- Notification.DEFAULT_LIGHTS
- Notification.DEFAULT_SOUND
- Notification.DEFAULT_VIBRATE
Чтобы к уведомлению добавить звук и вибрации по умолчанию, используйте код:
Если хотите установить сразу все значения по умолчанию, задействуйте константу 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:
Анимированный значок для уведомления
Покажу один фокус. Возьмём код из примера и заменим одну строчку, которая отвечает за вывод маленького значка — .setSmallIcon(android.R.drawable.stat_sys_upload):
Запускаем код и создаём уведомление. Вы увидите, что в строке состояния выводится анимированный значок стрелки. Такой способ стоит использовать для действительно важных сообщений, чтобы понапрасну не раздражать пользователя.
Возможно, если вы опустите метод 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) старые сообщения начнут удаляться автоматически.
Подводя итоги, следует отметить, у уведомлений очень много методов, которые можно использовать в своём приложении. Вот как может выглядеть полный набор:
- setSmallIcon() устанавливает маленький значок, который выводится в строке состояния, а также в правой части открытого уведомления.
- setLargeIcon() устанавливает большой значок, который выводится в открытом уведомлении слева.
- setWhen() определяет время для уведомления, по умолчанию время создания уведомления
- setTicker() выводит временную строку в строке состояния, которая затем исчезает. Остаётся только маленький значок (см. выше)
- setNumber() добавляет число справа от уведомления (не везде работает)
- setShowWhen() — показывать ли время в уведомлении (в Android 7.0 по умолчанию не показывается)
- setUsesChronometer() выводит счётчик вместо времени, показывающий сколько прошло от времени when. Полезно для уведомления секундомера или звонка
- setContentInfo() добавляет текст справа от уведомления (в новых версиях сверху)
- setColor() закрашивает значок и название приложения указанным цветом
- setOngoing() выводит уведомление поверх обычных уведомлений, такое уведомление нельзя закрыть или смахнуть.
- setVibrate() — виброзвонок
- setSound() — звук
- setLights() — цвет LED-индикатора
- setPriority() устанавливает приоритет от -2 (NotificationCompat.PRIORITY_MIN) до 2 (NotificationCompat.PRIORITY_MAX)
- setTimeoutAfter() (появилось в API 26) — устанавливает таймаут, после которого уведомление удалится
- setProgress() — индикатор прогресса
Приоритет
Не все уведомления одинаковы важны. Например, напоминание о том, что пора кормить кота — это сверхважное сообщение (не обсуждается). Угроза землетрясения, цунами, урагана — тоже очень важные сообщения. Новые версии программы, новое письмо и т.д. — не слишком важные уведомления, которые можно почитать после того, как покормили кота.
В 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, то при вызове сначала уведомление появится в виде плавающего окна в верхней части экрана, а только потом закроется и останется в виде стандартного уведомления в строке состояния.
В Android 8.0 вместо приоритетов стали использовать важность — IMPORTANCE_XXX.
Напоследок дам совет — читайте документацию. Google постоянно вносит какие-то изменения и добавления. Практически в каждой новой версии Android что-то менялось. Я не в состоянии отслеживать новинки и оперативно добавлять в статью.
Пример изменений, которые произошли в API 23:
- Удалили метод setLatestEventInfo()
- Добавили новые методы getLargeIcon() и getSmallIcon()
- Добавили новое поле класса CATEGORY_REMINDER и объявили устаревшими поля icon и largeIcon.
В уведомлениях можно использовать собственный макет, используя 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).
Если вы помните, в предупреждающем сообщении говорилось о возможности удалять уведомления. Третья кнопка позволяет это сделать. Вот почему эта настройка относится к разделу безопасности — ваша программа может удалять поступающие уведомления без ведома владельца устройства.
Вы можете программно запустить раздел с разрешением на использование службы.
Источник