预定的Toast通知警报循环

时间:2016-01-27 13:42:32

标签: c# win-universal-app uwp windows-10-universal

我正在使用Toast,我成功创建了在特定时间后出现的预定吐司。但是我有音频问题,我的目标是在循环unitl中用户按下按钮发出声音,但是当我将Loop参数设置为true时,我的吐司不起作用。我的系统是Windows 10 build 10240。

ToastContent content = new ToastContent()
{
    Duration = ToastDuration.Long,
    Visual = new ToastVisual()
    {
        TitleText = new ToastText()
        {
            Text = "Alarm"
        },

        BodyTextLine1 = new ToastText()
        {
            Text = "Wake up"
        }
    },
    Scenario = ToastScenario.Reminder,
    Audio = new ToastAudio()
    {
        Src = new Uri("ms-winsoundevent:Notification.Looping.Alarm"),
        Loop = true,
        Silent = false
    },
    Actions = new ToastActionsCustom()
    {
        Buttons =
        {
           new ToastButtonSnooze(),
           new ToastButtonDismiss()
        }
    }
};

ScheduledToastNotification toast = new ScheduledToastNotification(content.GetXml(), dueTime);
ToastNotificationManager.CreateToastNotifier().AddToSchedule(toast);

修改 当我把吐司写成xml时循环工作。这就是解决方案

Xml文件

    <?xml version="1.0" encoding="utf-8" ?>
<toast duration="long" scenario="alarm">
  <visual>
    <binding template="ToastGeneric" >
      <text> Daily .Net Tips </text>
    </binding>
   </visual>
  <audio src="ms-winsoundevent:Notification.Looping.Alarm" loop="true">
  </audio>
  <actions>
  <action activationType="system" arguments="snooze" content=""/>
  <action activationType="system" arguments="dismiss" content=""/>
  </actions>
  </toast>

C#代码

        string xmlString = File.ReadAllText(@"ToastTemplate\AlarmTemplate.xml");
        Windows.Data.Xml.Dom.XmlDocument toastDOM = new Windows.Data.Xml.Dom.XmlDocument();
        toastDOM.LoadXml(xmlString);

        var toastNotifier = ToastNotificationManager.CreateToastNotifier();
        toastNotifier.Show(new ToastNotification(toastDOM));  

1 个答案:

答案 0 :(得分:2)

这是来自Microsoft的Notifications团队的Andrew。

由于您使用Scenario = Alarm,不需要设置持续时间或循环

警报场景将自动保持用户屏幕上的祝酒词直到他们采取行动,因此设置持续时间=长是没用的。

此外,警报方案将自动循环音频,因此设置Loop = true是无用的。

以下是您的更新代码应该是什么样的(请确保您将方案设置为闹钟,我注意到您的原始代码中有提醒)...

ToastContent content = new ToastContent()
{
    Visual = new ToastVisual()
    {
        TitleText = new ToastText()
        {
            Text = "Alarm"
        },

        BodyTextLine1 = new ToastText()
        {
            Text = "Wake up"
        }
    },
    Scenario = ToastScenario.Alarm,
    Audio = new ToastAudio()
    {
        Src = new Uri("ms-winsoundevent:Notification.Looping.Alarm")
    },
    Actions = new ToastActionsCustom()
    {
        Buttons =
        {
           new ToastButtonSnooze(),
           new ToastButtonDismiss()
        }
    }
};

至于为什么吐司通过NotificationsExtensions而不是原始XML破解...看起来你在NotificationsExtensions中发现了一个错误。

我今天更新了NotificationsExtensions.Win10以解决此错误,版本10586.0.2有修复(如果您仍然使用10240版本,则版本为10240.0.8)。如果您有点好奇,修复的详细信息在this code commit