Мне нужна программа, которая добавит уведомление на Android. И когда кто-то нажимает на уведомление, он должен перейти ко второму моему действию.
Я установил код. Уведомление должно работать, но почему-то не работает. Notification
Не показывается. Я не знаю, что мне не хватает.
Код этих файлов:
Notification n = new Notification.Builder(this)
.setContentTitle("New mail from " + "test@gmail.com")
.setContentText("Subject")
.setContentIntent(pIntent).setAutoCancel(true)
.setStyle(new Notification.BigTextStyle().bigText(longText))
.build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Hide the notification after it's selected
notificationManager.notify(0, n);
android
notifications
Чоудхури AM
источник
источник
Activity
не запущен? ЛиNotification
не показывать?Ответы:
Код не будет работать без значка. Итак, добавьте
setSmallIcon
вызов в цепочку конструктора, чтобы он работал:Android Oreo (8.0) и выше
В Android 8 появилось новое требование - устанавливать
channelId
свойство с помощью файлаNotificationChannel
.источник
setChannelId
требуются. Прежде чем добавить это, уведомление отображается на моем устройстве SONY, но не на устройстве SAMSUNG.Android.OS.BuildVersionCodes.O
равно 26?if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ mBuilder.setChannelId(channelId); }
поскольку без этой проверки уведомление не будет отображаться, даже если API вашего устройства> = 26.На самом деле ответ Чернандо Валле не кажется правильным. Опять же, ваш вопрос слишком расплывчатый, потому что вы не упомянули, что не так или не работает.
Глядя на ваш код, я предполагаю, что он
Notification
просто не отображается.Ваше уведомление не отображается, потому что вы не указали значок. Несмотря на то, что в документации SDK не упоминается, что это необходимо, на самом деле это так, и вы
Notification
не увидите его без него.addAction
доступно только с версии 4.1. До этого вы использовали быPendingIntent
для запускаActivity
. Кажется, вы указали aPendingIntent
, поэтому ваша проблема в другом. Логично сделать вывод, что это отсутствующий значок.источник
Notification.Builder
, а неNotificationCompat.Builder
, как вы предлагаете. Тот факт, что существует библиотека совместимости и ее можно использовать, не означает, что функция доступна в обычном API. Ссылка, которую вы предоставляете, фактически оговаривает это. Этот вопрос явно связан сNotification.Builder
, как показывает пример. И библиотека совместимости, вероятно, включала эту функцию только после того, как была доступна версия 4.1. Ваш ответ вводит в заблуждение, потому что теперь вы предполагаете, что он доступен с версии 2.3.Вам не хватало маленького значка. Я сделал ту же ошибку, и вышеприведенный шаг решил ее.
Согласно официальной документации: объект уведомления должен содержать следующее:
Маленький значок, установленный setSmallIcon ()
Заголовок, установленный setContentTitle ()
Подробный текст, установленный setContentText ()
В Android 8.0 (уровень API 26) и выше допустимый идентификатор канала уведомлений, установленный setChannelId () или предоставленный в конструкторе NotificationCompat.Builder при создании канала.
См. Http://developer.android.com/guide/topics/ui/notifiers/notifications.html.
источник
Это меня сегодня сбило с толку, но я понял, что это произошло потому, что в Android 9.0 (Pie) режим «Не беспокоить» по умолчанию также скрывает все уведомления, а не просто заглушает их, как в Android 8.1 (Oreo) и ранее. Это не относится к уведомлениям.
Мне нравится включать DND для моего устройства разработки, поэтому, войдя в настройки DND и изменив параметр, чтобы просто отключить уведомления (но не скрывать их), я исправил это.
источник
Создание каналов уведомлений является обязательным для версий Android после Android 8.1 (Oreo) для отображения уведомлений. Если уведомления не отображаются в вашем приложении для Oreo + Android, вам необходимо вызвать следующую функцию при запуске вашего приложения:
источник
Я думаю, ты забываешь
Смотрите здесь: Добавить действие
источник
addAction()
недоступен наNotification.Builder
.Action
экземпляр, с помощью которого вы можете создатьNotification.Action.Builder
. PS, Всегда используйте альтернативу Compat (например, NotificationCompat), поскольку Google имеет тенденцию исправлять ошибки и обеспечивать лучшую совместимость с ними.setContentIntent(null)
вместе с построителем.У меня была такая же проблема с моим приложением для Android. Я пробовал уведомления и обнаружил, что уведомления отображаются на моем эмуляторе Android, работающем под управлением Android 7.0. работающем под управлением системы (Nougat), тогда как он не работает на моем телефоне с Android 8.1 (Oreo).
Прочитав документацию, я обнаружил, что в Android есть функция, называемая каналом уведомлений, без которой уведомления не будут отображаться на устройствах Oreo. Ниже приведена ссылка на официальную документацию Android по каналам уведомлений.
источник
Для меня это было проблемой
deviceToken
. Пожалуйста, проверьте, правильно ли обновлены токены устройства получателя и отправителя в вашей базе данных или там, где вы обращаетесь к нему для отправки уведомлений.Например, используйте следующее, чтобы обновить токен устройства при запуске приложения. Поэтому он всегда будет правильно обновляться.
источник
deviceToken
заявлено?onSuccess
пусто?onSuccess
буквы - я имел в виду внутреннюю (которая пуста))Вам также необходимо изменить файл build.gradle и добавить в него используемую версию Android SDK:
В моем случае это сработало как шарм.
источник
Уведомления могут не отображаться, если вы быстро показываете уведомления одно за другим или отменяете существующее, а затем сразу же показываете его снова (например, чтобы вызвать всплывающее уведомление, чтобы уведомить пользователя об изменении в текущем уведомлении). В этих случаях система может решить просто заблокировать уведомление, если сочтет, что оно может стать слишком большим для пользователя или рассылать спам.
Обратите внимание, что, по крайней мере, на стандартном Android (протестировано с 10) снаружи такое поведение выглядит немного случайным: иногда это происходит, а иногда - нет. Я предполагаю, что существует очень короткий временной порог, в течение которого вам не разрешено отправлять слишком много уведомлений. Звонок,
NotificationManager.cancel()
а затемNotificationManager.notify()
может иногда вызывать такое поведение.Если у вас есть возможность, при обновлении уведомления не отменяйте его раньше, а просто позвоните
NotificationManager.notify()
с обновленным уведомлением. Похоже, что это не вызывает вышеупомянутую блокировку системой.источник
Если вы используете версию> = Android 8.1 (Oreo) при использовании канала уведомлений, установите его важность на высокий уровень:
источник