@Oleg_123
разработчик c#.

Как можно отменить локальные уведомления?

Создаются локальный уведомления. Необходимо повторять уведомления, если пользователь их игнорирует. Когда пользователь зашел в приложение и выполнил нужные действия, то необходимо сбросить уведомления.
Уведомления должны приходить даже когда приложение выключено.

Сейчас у меня проблема в том что приходящие уведомления не отключаются.
Подскажите пожалуйста что я делаю не так?

Код который я использую для решения задачи:
public static Task Send(LocalNotification notification, bool testParam = false)
{
    if (!isSchedule)
    {
        var alarmManager = (AlarmManager)Android.App.Application.Context.GetSystemService(Context.AlarmService);
        var serializedNotification = SerializeNotification(notification);
        var triggerTime = NotifyTimeInMilliseconds(notification.NotifyTime);
        var pending = GetPendingIntent(notification.Id, serializedNotification);
        alarmManager.SetInexactRepeating(AlarmType.RtcWakeup, Convert.ToInt64(triggerTime), 5000, pending);
    }
    else
    {
        try
        {
            var launchIntent = Android.App.Application.Context.PackageManager.GetLaunchIntentForPackage(Android.App.Application.Context.PackageName);
            launchIntent.SetFlags(ActivityFlags.NewTask | ActivityFlags.ClearTask);

            var builder = new NotificationCompat.Builder(Android.App.Application.Context)
                                                .SetAutoCancel(true)
                                                .SetContentTitle(notification.Title)
                                                .SetContentText(notification.Text)
                                                .SetSmallIcon(Android.App.Application.Context.ApplicationInfo.Icon)
                                                .SetContentIntent(Android.App.TaskStackBuilder.Create(Android.App.Application.Context).AddNextIntent(launchIntent).GetPendingIntent(notification.Id, PendingIntentFlags.UpdateCurrent))
                                                .SetVibrate(new long[] { 500, 500 })
                                                .SetSound(Android.Net.Uri.Parse("android.resource://" + Android.App.Application.Context.PackageName + "/" + Resource.Raw.local_notifications));

            var not = builder.Build();
            NotificationManagerCompat.From(Android.App.Application.Context).Notify(notification.Id, not);
        }
        catch (Exception exp)
        {
            var errorMsg = exp.Message;
        }
    }
}

public void Cancel(int id)
{
    var intent = CreateIntent(id);
    var pendingIntent = PendingIntent.GetBroadcast(Android.App.Application.Context, id, intent, PendingIntentFlags.CancelCurrent);
    pendingIntent.Cancel();
    var alarmManager = GetAlarmManager();
    alarmManager.Cancel(pendingIntent);

    var notificationManager = NotificationManagerCompat.From(Android.App.Application.Context);
    notificationManager.CancelAll();
}

private static PendingIntent GetPendingIntent(int id, string nottification)
{
    var intent = new Intent(Android.App.Application.Context, typeof(ScheduledAlarmHandler)).PutExtra(NotificationString, nottification);
    var pending = PendingIntent.GetBroadcast(Android.App.Application.Context, id, intent, PendingIntentFlags.CancelCurrent);
    return pending;
}
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы