Xamarin android сгруппированные уведомления, не заменяемые сводной сводкой - PullRequest
0 голосов
/ 17 января 2020

Ожидаемое / желаемое поведение:

  • Два уведомления сгруппированы, свернуты и заменены сводным уведомлением. В раскрывающемся сводном уведомлении должны отображаться оба отдельных уведомления.

Фактическое поведение:

  • Два уведомления сгруппированы, свернуты, но не заменены сводкой.
NotificationCompat.Builder summaryBuilder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
            .SetContentText("Notification Summary")
            .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
            .SetContentTitle("Title summary")
            .SetGroupSummary(true)
            .SetGroup("GROUP_A")
            .SetSmallIcon(Resource.Drawable.icon);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
            .SetContentText("Notification a")
            .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
            .SetContentTitle("Title a")
            .SetGroup("GROUP_A")
            .SetSmallIcon(Resource.Drawable.icon);
NotificationCompat.Builder notificationBuilderB = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
            .SetContentText("Notification b")
            .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification))
            .SetContentTitle("Title b")
            .SetGroup("GROUP_A")
            .SetSmallIcon(Resource.Drawable.icon);


var notificationManager = NotificationManager.FromContext(this);
notificationManager.Notify(3, notificationBuilder.Build());
notificationManager.Notify(2, notificationBuilderB.Build());
notificationManager.Notify(1, summaryBuilder.Build());

То, что я пытался:

  • Использовать NotificationManagerCompat вместо NotificationManager (не помогает)
  • Изменить порядок вызовов Notify (интересно, сводка действительно появляется при первом уведомлении, но затем перезаписывается при следующем уведомлении).
  • Запуск на другом телефоне

Использование

  • Android 9 (или 8)
  • Xamarin. Android v28 .0.0.3
  • Xamarin.Forms 4.3.0

Мой код неверен или есть ошибка?

1 Ответ

1 голос
/ 18 января 2020

Это вызвано Notification ID 1, 2, 3. Notification ID, используемым для всех уведомлений в этом приложении. Повторное использование идентификатора уведомления предотвращает создание множества различных уведомлений, поскольку пользователь экспериментирует с различными настройками уведомлений - каждый запуск повторно использует и обновляет одно и то же уведомление.

notificationManager.Notify(3, notificationBuilder.Build());
notificationManager.Notify(2, notificationBuilderB.Build());
notificationManager.Notify(1, summaryBuilder.Build());

Если вы хотите заменить сводным уведомлением, используйте тот же Notification ID 1 со сводным уведомлением.

Обратите внимание, что если вы используете сводное уведомление для замены на то же Notification ID, есть только одно сводное уведомление.

Обновлено:

Я хочу увидеть сводную сводку, которая при раскрытии показывает как уведомления a, так и b. Извините, если не ясно, я обновил вопрос.

Если вы хотите узнать больше об Summery уведомлении, вы можете использовать SetStyle, чтобы сделать это с BigTextStyle. Я делаю образец кода для вашей справки.

Notification notificationA = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
                        .SetContentText("Notification a")                           
                        .SetContentTitle("Title a")
                        .SetSmallIcon(Resource.Drawable.star)
                        .SetGroup("GROUP_A")
                        .SetAutoCancel(true)
                        .Build();


            Notification notificationB = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
                        .SetContentText("Notification b")                           
                        .SetContentTitle("Title b")
                        .SetSmallIcon(Resource.Drawable.star)
                        .SetGroup("GROUP_A")
                        .SetAutoCancel(true)
                        .Build();

            Notification notificationSummery = new NotificationCompat.Builder(this, MainActivity.CHANNEL_ID)
                        .SetStyle(new NotificationCompat.BigTextStyle().SetSummaryText("Summary Notification"))
                        .SetSmallIcon(Resource.Drawable.star)
                        .SetGroup("GROUP_A")
                        .SetGroupSummary(true)
                        .Build();

            var notificationManager1 = NotificationManager.FromContext(this);

            notificationManager1.Notify(1, notificationA);
            notificationManager1.Notify(2, notificationB);
            notificationManager1.Notify(3, notificationSummery);

enter image description here

...