Подтвердить что ты не робот

Уведомление Android не отображается

Мне нужна программа, которая добавит уведомление на Android. И когда кто-то нажимает на уведомление, это должно привести его ко второму виду деятельности.

Я установил код. Уведомление должно работать, но по какой-то причине оно не работает. Notification вообще не отображается. Я не знаю, что мне не хватает.

Код этих файлов:

Notification n = new Notification.Builder(this)
        .setContentTitle("New mail from " + "[email protected]")
        .setContentText("Subject")
        .setContentIntent(pIntent).setAutoCancel(true)
        .setStyle(new Notification.BigTextStyle().bigText(longText))
        .build();

NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Hide the notification after it selected

notificationManager.notify(0, n);
4b9b3361

Ответ 1

Код не будет работать без иконки. Итак, добавьте вызов setSmallIcon в цепочку компоновщика следующим образом:

.setSmallIcon(R.drawable.icon)

Android Oreo (8.0) и выше

В Android 8 введено новое требование настройки свойства channelId с помощью NotificationChannel.

private NotificationManager mNotificationManager;

NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(mContext.getApplicationContext(), "notify_001");
Intent ii = new Intent(mContext.getApplicationContext(), RootActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, ii, 0);

NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
bigText.bigText(verseurl);
bigText.setBigContentTitle("Today Bible Verse");
bigText.setSummaryText("Text in detail");

mBuilder.setContentIntent(pendingIntent);
mBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
mBuilder.setContentTitle("Your Title");
mBuilder.setContentText("Your text");
mBuilder.setPriority(Notification.PRIORITY_MAX);
mBuilder.setStyle(bigText);

mNotificationManager =
    (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

// === Removed some obsoletes
if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
{
    String channelId = "Your_channel_id";
    NotificationChannel channel = new NotificationChannel(
                                        channelId,
                                        "Channel human readable title",
                                        Android.App.NotificationImportance.Default);
   mNotificationManager.createNotificationChannel(channel);
  mBuilder.setChannelId(channelId);
}

mNotificationManager.notify(0, mBuilder.build());

Ответ 2

На самом деле ответ Шернандо Валле не кажется правильным. Опять же, ваш вопрос слишком расплывчат, потому что вы не упоминаете, что не так или не работает.

Глядя на ваш код, я предполагаю, что Notification просто не отображается.

Ваше уведомление не отображается, потому что вы не предоставили значок. Несмотря на то, что в документации SDK не указано, что это необходимо, на самом деле это так, и ваше Notification не будет отображаться без него.

addAction доступен только с 4.1. До этого вы использовали PendingIntent для запуска Activity. Кажется, вы указываете PendingIntent, поэтому ваша проблема лежит в другом месте. По логике, нужно сделать вывод, что это отсутствующий значок.

Ответ 3

Вы пропустили маленькую иконку. Я сделал ту же ошибку, и вышеуказанный шаг разрешил ее.

Согласно официальной документации: объект уведомления должен содержать следующее:

  1. Маленькая иконка, установленная setSmallIcon()

  2. Заголовок, установленный setContentTitle()

  3. Подробный текст, установленный setContentText()

  4. На Android 8.0 (уровень API 26) и выше действительный идентификатор канала уведомления, установленный setChannelId() или предоставленный в конструкторе NotificationCompat.Builder при создании канала.

См. Http://developer.android.com/guide/topics/ui/notifiers/notifications.html.

Ответ 4

Это сбило меня с толку сегодня, но я понял, что это потому, что в Android 9.0 (Pie) функция "Не беспокоить" по умолчанию также скрывает все уведомления, а не просто отключает их, как в Android 8.1 (Oreo) и ранее. Это не относится к уведомлениям.

Мне нравится, когда DND включен для моего девелоперского устройства, поэтому, зайдя в настройки DND и изменив настройку, просто отключив уведомления (но не скрывая их), я исправил это.

Ответ 5

Создание каналов уведомлений является обязательным для версий Android после Android 8.1 (Oreo) для отображения уведомлений. Если уведомления не отображаются в вашем приложении для Android Oreo+, вам нужно вызвать следующую функцию при запуске приложения:

private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name,
       importance);
        channel.setDescription(description);
        // Register the channel with the system; you can't change the importance
        // or other notification behaviours after this
        NotificationManager notificationManager =
        getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
   }
}

Ответ 6

Я думаю, что вы забыли

addAction(int icon, CharSequence title, PendingIntent intent)

Смотрите здесь: Добавить действие

Ответ 7

Для меня это была проблема с deviceToken. Проверьте, правильно ли обновляется токен устройства получателя и отправителя в вашей базе данных или куда вы обращаетесь к нему для отправки уведомлений.

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

// Device token for push notifications
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(
  new OnSuccessListener<InstanceIdResult>() {

    @Override
    public void onSuccess(InstanceIdResult instanceIdResult) {

        deviceToken = instanceIdResult.getToken();

        // Insert device token into Firebase database
        fbDbRefRoot.child("user_detail_profile").child(currentUserId).child("device_token")).setValue(deviceToken)
                .addOnSuccessListener(
                  new OnSuccessListener<Void>() {

                    @Override
                    public void onSuccess(Void aVoid) {

                    }
                });
    }
});

Ответ 8

Вам также нужно изменить файл build.gradle и добавить в него используемую версию Android SDK:

implementation 'com.android.support:appcompat-v7:28.0.0'

Это сработало как шарм в моем случае.

Ответ 9

У меня была та же проблема с моим приложением для Android. Я пробовал уведомления и обнаружил, что уведомления отображались на моем эмуляторе Android, который работал под управлением системы Android 7.0 (Nougat), тогда как на моем телефоне с Android 8.1 (Oreo) он не работал.

Прочитав документацию, я обнаружил, что в Android есть функция, называемая каналом уведомлений, без которой уведомления не будут отображаться на устройствах Oreo. Ниже приведена ссылка на официальную документацию по Android на каналах уведомлений.

Ответ 10

Если вы используете одну версию> = Android 8.1 (Oreo) при использовании канала уведомлений, установите для него значение важности:

int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);