it-swarm.com.ru

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's selected

notificationManager.notify(0, n);
97
Choudhury A. M.

Код не будет работать без иконки. Итак, добавьте вызов 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's 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);
   notificationBuilder.SetChannelId(channelId);
}

mNotificationManager.notify(0, mBuilder.build());
358
Choudhury A. M.

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

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

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

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

56
slinden77

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

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

  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

26
Vijay Srinivasan

Это сбило меня с толку сегодня, но я понял, что это потому что на Android 9. (пирог), не беспокоить по умолчанию также скрывает все уведомления, а не просто заставляет их замолчать, как в Android 8.1 (Oreo) и раньше. Это не относится к уведомлениям.

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

7
Chee-Yi

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

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);
   }
}
5
Amit Jaiswal

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

addAction(int icon, CharSequence title, PendingIntent intent)

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

1
ƒernando Valle

Для меня это была проблема с 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) {

                    }
                });
    }
});
0
DragonFire

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

реализация 'com.Android.support:appcompat-v7:28.0.0'

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

0
Ashwin Balani

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

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

0
SHIVAM CHAUDHARY