Xamarin.Android Notification.Notify ничего не делает - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь показать локальное уведомление с помощью стандартного API Android:

var message = intent.GetStringExtra("message");
        var title = intent.GetStringExtra("title");

        var notIntent = new Intent(context, typeof(MainActivity));
        var contentIntent = PendingIntent.GetActivity(context, 0, notIntent, PendingIntentFlags.CancelCurrent);
        var manager = NotificationManagerCompat.From(context);

        var style = new NotificationCompat.BigTextStyle();
        style.BigText(message);

        int resourceId = Resource.Drawable.ic_launcher;

        var wearableExtender = new NotificationCompat.WearableExtender()
                .SetBackground(BitmapFactory.DecodeResource(context.Resources, resourceId));

        //Generate a notification with just short text and small icon
        var builder = new NotificationCompat.Builder(context)
                        .SetContentIntent(contentIntent)
                        .SetSmallIcon(Resource.Drawable.ic_launcher)
                        .SetContentTitle(title)
                        .SetContentText(message)
                        .SetStyle(style)
                        .SetWhen(Java.Lang.JavaSystem.CurrentTimeMillis())
                        .SetAutoCancel(true)
                        .Extend(wearableExtender);

        var notification = builder.Build();
        manager.Notify(0, notification);

Я пробовал разные версии создания уведомлений, но ни одна из них ничего не делает.Это как если бы оно никогда не вызывалось, но оно вызывалось.Я тестирую на: Samsung Galaxy s8 Android 8.0 Target SDK 8.1 (Oreo)

Я что-то пропускаю, чтобы добавить в манифест или это о новых каналах уведомлений?

1 Ответ

0 голосов
/ 26 мая 2018

Вы должны использовать каналы на устройствах Oreo + (API-26 +).

Что-то вроде:

Notification ForegroundNotification(string title, string message)
{
    using (var notificationManager = NotificationManager.FromContext(ApplicationContext))
    {
        var notificationBuilder = new Notification.Builder(ApplicationContext)
                                          .SetContentTitle(title)
                                                        .SetContentText(message)
                                                        .SetSmallIcon(Resource.Drawable.ic_stat_notification_network_locked)
                                                        .SetContentIntent(pendingIntent);
        if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
        {
            NotificationChannel channel;
            var channelName = ApplicationContext.PackageName;
            channel = notificationManager.GetNotificationChannel(channelName);
            if (channel == null)
            {
                channel = new NotificationChannel(channelName, channelName, NotificationImportance.Default)
                {
                    LockscreenVisibility = NotificationVisibility.Public
                };
                notificationManager.CreateNotificationChannel(channel);
            }
            channel.Dispose();
            notificationBuilder = notificationBuilder
                                              .SetChannelId(channelName);
        }
        return notificationBuilder.Build();
    }
}

Таким образом, ваш NotificationManager.Notify может стать:

manager.Notify(0, ForegroundNotification("StackOverflow", "Totally Rocks"));
...