2017-11-25 1 views
0

Ich möchte periodische tost Benachrichtigungen erstellen, aber ich fand eine falsche Lösung, weil snoozeInterva nur eine "Verschiebung" ist.Periodisch geplante toastnotification UWP

Der Code:

public sealed partial class MainPage : Page 
{ 
    const string TOAST = @" 
         <toast> 
          <visual> 
          <binding template=""ToastTest""> 
           <text>Hello Toast</text> 
          </binding> 
          </visual> 
          <audio src =""ms-winsoundevent:Notification.Mail"" loop=""true""/> 
         </toast>"; 

    public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    private void btnNotification_Click(object sender, RoutedEventArgs e) 
    { 
     var when = DateTime.Now.AddSeconds(6); 
     var offset = new DateTimeOffset(when); 

     Windows.Data.Xml.Dom.XmlDocument xml = new Windows.Data.Xml.Dom.XmlDocument(); 
     xml.LoadXml(TOAST); 
     ScheduledToastNotification toast = new ScheduledToastNotification(xml, offset, TimeSpan.FromSeconds(60), 5); 
     toast.Id = "IdTostone"; 
     toast.Tag = "NotificationOne"; 
     ToastNotificationManager.CreateToastNotifier().AddToSchedule(toast); 
    } 
} 

Dann .. Wie kann ich periodische Toast-Benachrichtigungen erstellen, zum Beispiel um 13:00 Uhr jeden Tag?

Vielen Dank im Voraus!

Antwort

1

Leider gibt es keinen bequemen Weg, dies zu tun. Wenn Sie jeden Tag zur gleichen Zeit einen Toast senden müssen, können Sie eine Reihe von Toast-Benachrichtigungen für beispielsweise einen Monat im Voraus planen, einen für jeden Tag. Und wenn Sie die Tageszeit für all diese Toasts ändern müssen, entfernen Sie sie alle aus dem Toastplan mit der Klasse ToastNotificationManager und erstellen Sie neue geplante Toasts mit der richtigen Zeit.

Etwas wie folgt aus:

private void ScheduleToast(DateTime scheduledTime) 
    { 
     const string TOAST = @" 
        <toast> 
         <visual> 
         <binding template=""ToastTest""> 
          <text>Hello Toast</text> 
         </binding> 
         </visual> 
         <audio src =""ms-winsoundevent:Notification.Mail"" loop=""true""/> 
        </toast>"; 

     Windows.Data.Xml.Dom.XmlDocument xml = new Windows.Data.Xml.Dom.XmlDocument(); 
     xml.LoadXml(TOAST); 

     ScheduledToastNotification toast = new ScheduledToastNotification(xml, scheduledTime); 
     toast.Id = "IdTostone" + scheduledTime.ToString(); 
     toast.Tag = "NotificationOne"; 
     toast.Group = "MyEverydayToasts"; 
     ToastNotificationManager.CreateToastNotifier().AddToSchedule(toast); 
    } 

    private void RescheduleToastsForTheNextDays(TimeSpan timeOfDay, int nDays = 30) 
    { 
     ToastNotifier toastNotifier = ToastNotificationManager.CreateToastNotifier(); 
     IReadOnlyList<ScheduledToastNotification> scheduledToasts = toastNotifier.GetScheduledToastNotifications(); 
     foreach(ScheduledToastNotification toast in scheduledToasts) 
      toastNotifier.RemoveFromSchedule(toast); 

     for (int i=0; i<nDays; i++) 
     { 
      DateTime scheduledTime = DateTime.Today + timeOfDay + TimeSpan.FromDays(i); 

      if (scheduledTime > DateTime.Now) 
       ScheduleToast(scheduledTime); 
     } 
    } 
+0

Ich möchte eine Frage stellen, auch wenn ein bisschen banal ... Haben Sie den Windows-Zeit App, Wiederholung der Wochentag Alarm auf diese Weise strukturiert ist? Ich bitte ihn, die Ideen zu klären. Danke für die Hilfe .. – LightGreen

+0

@LightGreen Ja, ich denke, es ist gut. Vielleicht nicht perfekt. –

+0

Nochmals Danke für Hilfe .. – LightGreen