无法在Windows Phone 8.1 Toast通知中播放自定义音频wav文件

时间:2014-08-31 07:58:02

标签: windows-phone-8.1 toast

我在Windows Phone 8.1中遇到了Toast通知问题。 (确切版本:8.10.14157.200)。 我有一个应用程序向手机发送Toast通知。 我想用这个吐司通知播放自定义声音。 然而,Windows Phone只播放其默认的通知声音而不是我自己在toast XML中指定的声明。

<?xml version="1.0" encoding="UTF-8"?>
<toast duration="long">
   <visual>
      <binding template="ToastText02">
         <text id="1">Kainat</text>
         <text id="2">Hi</text>
      </binding>
   </visual>
 <audio src="/Assets/hodor.wav" />
</toast>

我尝试过以下音频元素但没有成功。

<audio src="hodor.wav" />
<audio src="/hodor.wav" />
<audio src="/Assets/hodor.wav" />
<audio src="ms-appx:///Assets/hodor.wav" />
<audio src="ms-appx:///hodor.wav" />

我也尝试过静音(只是为了验证XML中的音频元素是否有效)

<audio silent="true"/>

这很有效,声音被抑制了。

我在我的项目中添加了hodor.wav以及我的visual studio项目中的Assets文件夹。 还将此wav资源的“复制到输出目录”选项设置为“始终复制”。

我有什么遗失的吗?

3 个答案:

答案 0 :(得分:3)

@OliverUlm:MSDN说WP8.1可以使用自定义声音。

根据here中的某个MSDN页面。它说:

&#34;在Windows Phone 8.1上,此属性还可以包含本地音频文件的路径,并带有以下前缀之一:

ms-appx:///
ms-appdata:///

但是,我仍然无法弄清楚如何播放声音。

<强>更新

<?xml version="1.0" encoding="UTF-8"?>
<toast>
  <visual>
    <binding template="ToastText02">
      <text id="1">Title</text>
      <text id="2">Message</text>
    </binding>
  </visual>
  <audio src="ms-appx:///Audio/Female/0530.mp3" />
</toast>

它对我有用。

答案 1 :(得分:0)

根据MSDN上的文档,WNS中的音频标签不支持音频元素中的完全自定义声音(与WP8.0 GDR3上的WPNS相反)。您只能使用以下字符串来影响播放的通知类型(以及内置于操作系统中的通知)。

  • MS-winsoundevent:Notification.Default
  • MS-winsoundevent:Notification.IM
  • MS-winsoundevent:Notification.Mail
  • MS-winsoundevent:Notification.Reminder
  • MS-winsoundevent:Notification.SMS
  • MS-winsoundevent:Notification.Looping.Alarm
  • MS-winsoundevent:Notification.Looping.Alarm2
  • MS-winsoundevent:Notification.Looping.Alarm3
  • MS-winsoundevent:Notification.Looping.Alarm4
  • MS-winsoundevent:Notification.Looping.Alarm5
  • MS-winsoundevent:Notification.Looping.Alarm6
  • MS-winsoundevent:Notification.Looping.Alarm7
  • MS-winsoundevent:Notification.Looping.Alarm8
  • MS-winsoundevent:Notification.Looping.Alarm9
  • MS-winsoundevent:Notification.Looping.Alarm10
  • MS-winsoundevent:Notification.Looping.Call
  • MS-winsoundevent:Notification.Looping.Call2
  • MS-winsoundevent:Notification.Looping.Call3
  • MS-winsoundevent:Notification.Looping.Call4
  • MS-winsoundevent:Notification.Looping.Call5
  • MS-winsoundevent:Notification.Looping.Call6
  • MS-winsoundevent:Notification.Looping.Call7
  • MS-winsoundevent:Notification.Looping.Call8
  • MS-winsoundevent:Notification.Looping.Call9
  • MS-winsoundevent:Notification.Looping.Call10

答案 2 :(得分:0)

试试这个例子:

代码:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        ToastTemplateType toastTemplate = ToastTemplateType.ToastText02;
        XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
        XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
        toastTextElements[0].AppendChild(toastXml.CreateTextNode("Test1"));
        toastTextElements[1].AppendChild(toastXml.CreateTextNode("Test2"));
        IXmlNode toastNode = toastXml.SelectSingleNode("/toast");
        XmlElement audio = toastXml.CreateElement("audio");
        string sound = "test1.mp3";
        if (sound != null)
            audio.SetAttribute("src", "ms-appdata:///local/" + sound);
        else
            audio.SetAttribute("src", "ms-appx:///sounds/Bell.mp3");
        toastNode.AppendChild(audio);
        ToastNotifier toastNotifier =
         ToastNotificationManager.CreateToastNotifier();
        ToastNotification toastNotification = new ToastNotification(toastXml);
        toastNotifier.Show(toastNotification);
    }

使用xaml: 在XMLFile1.xml中:

     <?xml version="1.0" encoding="UTF-8"?>
     <toast>
      <visual>
       <binding template="ToastText02">
        <text id="1">Test1</text>
        <text id="2">Test2</text>
      </binding>
     </visual>
   <audio src="ms-appdata:///local/test1.mp3"/>
 </toast>

在MainPage.xaml.cs中:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        XmlDocument xmldoc = new XmlDocument();
        xmldoc.LoadXml(XDocument.Load("XMLFile1.xml").ToString());
        ToastNotifier toastNotifier =
        ToastNotificationManager.CreateToastNotifier();
        ToastNotification toastNotification = new ToastNotification(xmldoc);
        toastNotifier.Show(toastNotification);
    }