此主题尚未评级 - 评价此主题

Windows Phone 的 Toast

2013/12/5

适用于: Windows Phone 8 | Windows Phone OS 7.1

Toast 显示在屏幕的顶部,用于通知用户某个事件,如新闻或天气警报。

本主题包含以下各节。

下图演示由假想 Contoso 应用创建的 Toast 通知。

AP_Toast_ToastElements

除非用户通过向右轻拂关闭通知,否则 Toast 通知将显示大约 10 秒钟。如果用户点按 Toast,默认情况下,将启动应用的开始屏幕。或者,您可以选择指定应用要启动的屏幕。

在不具有 的设备上,当目标应用在前台运行时,不会显示 Toast 通知。在具有 的设备上,当目标应用在前台运行但被其他活动(例如拨打电话或锁定屏幕)遮盖时,会显示 Toast 通知。

Windows Phone 将用户选定的主题颜色作为 Toast 的背景色。作为开发人员,您可以使用应用的图标、标题和内容字符串创建 Toast 通知。与 Toast 各个方面相关联的 API 名称是不同的,具体取决于它是通过代码在本地创建的,还是使用推送通知或通过云服务在外部创建的。稍后查看本主题中的图像,以了解确切的 API 名称。

可以显示的文本数量取决于在 Toast 消息中使用的字符以及 Title(粗体)和 Content(非粗体)的长度。如果只设置了一个 Title,则可以显示大约 40 个字符,之后的字符将被截断。如果只设置了“内容”,则可以显示大约 47 个字符。如果一个 Toast 在 TitleContent 之间平均拆分,则可以显示大约 41 个字符。无法放在 Toast 上的任何文本都将被截断。

Windows Phone 在“标题”“内容”的左侧显示一个小版本的应用图标。尽管您可以定义与您的应用关联的图标,但无法通过 Toast 通知传递不同的图标。

您可以使用以下两种方法之一创建 Toast 通知:通过代码在本地创建或使用云服务在外部创建。视您选择创建 Toast 通知的方式而定,属性名称会有所不同。

使用代码创建 Toast 通知

下图显示您使用代码创建 Toast 通知时会用到的属性名称。尽管您可以定义与您的应用关联的图标,但无法通过 Toast 通知用不同的图标来代替“应用列表图标”传递,如下图所示。

Creating a toast notification using code

以下代码示例演示用于使用本地代码创建 Toast 通知的属性。

// Create a toast notification.
// The toast notification will not be shown if the foreground app is running.
ShellToast toast = new ShellToast();
toast.Title = "[title]";
toast.Content = "[content]";
toast.Show();

使用云服务创建 Toast 通知

下图显示您使用云服务创建 Toast 通知时会用到的属性名称。尽管您可以定义与您的应用关联的图标,但无法通过 Toast 通知用不同的图标来代替“应用列表图标”传递,如下图所示。

Creating a toast notification using a cloud servic

以下代码示例演示用于使用云服务创建 Toast 通知的 XML 负载。

string toastMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
"<wp:Notification xmlns:wp=\"WPNotification\">" +
    "<wp:Toast>" +
        "<wp:Text1>[string]</wp:Text1>" +
        "<wp:Text2>[string]</wp:Text2>" +
        "<wp:Param>[string]</wp:Param>" +
    "</wp:Toast>" +
"</wp:Notification>";

有关使用云服务时的 Toast 通知负载的更多详细信息,请参见发送 Windows Phone 的推送通知。有关如何使用云服务创建 Toast 通知的详细演练,请参见如何发送和接收 Windows Phone 的 Toast 通知

使用 Toast 通知深层链接至屏幕

您可以使用 Param 元素或 NavigateUri 属性来深层链接至应用中的特定屏幕,具体取决于您创建 Toast 通知的方式。以下是允许的格式。任何用于以下示例的字符串不得超过 256 个字符。

  • /page1.xaml – 定义应用启动时导航到的应用中的屏幕。字符串必须以“/”开头。

  • /page1.xaml?value1=1234 &amp;value2=9876 – 定义应用启动时导航到的屏幕,以及信息的名称/值对。字符串必须以“/”开头。

  • ?value1=1234 &amp;value2=9876 – 包含传递给应用默认开始屏幕的信息名称/值对。字符串必须以“?”开头。

提取 URI 参数

通常是在用户点按 Toast 通知并导航到在设备上运行的客户端应用的指示屏幕之后,从 OnNavigatedTo 事件处理程序中的 Toast 通知负载分析出 URI 参数值。

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            string strVal1 = this.NavigationContext.QueryString["value1"];
            string strVal2 = this.NavigationContext.QueryString["value2"];

        }

(操作系统版本号 8.0.10492)引入了为 Toast 通知提供自定义声音的功能。声音文件可以采用 WAV、WMA 或 MP3 格式,长度必须小于 10 秒,且必须存储在应用的安装目录或本地存储文件夹中。

若要对从代码启动的 Toast 使用自定义声音,您必须先确定当前设备是否在 上运行。确定了当前声音受支持后,您必须使用反射访问 ShellToast 类的新“声音”属性。在您的代码中使用以下帮助器方法确定操作系统版本并使用反射设置属性值。

// Set the minimum version number that supports custom toast sounds
private static Version TargetVersion = new Version(8, 0, 10492);
        
// Function to determine if the current device is running the target version.
public static bool IsTargetedVersion { get { return Environment.OSVersion.Version >= TargetVersion; } }
       
// Function for setting a property value using reflection.
private static void SetProperty(object instance, string name, object value)
{
    var setMethod = instance.GetType().GetProperty(name).GetSetMethod();
    setMethod.Invoke(instance, new object[] { value });
}

以下示例向您显示了如何使用这些帮助器方法,以便使用自定义声音显示 Toast。请注意,在验证设备支持该属性后,您可以通过将“声音”属性设置为空字符串来显示不发声的 Toast。

public void ShowToast(bool useCustomSound, bool useWavFormat, bool doSilentToast)
{
    ShellToast toast = new ShellToast();
    toast.Title = "[title]";
    toast.Content = "[content]";

    //If the device is running the right version and a custom sound is requested
    if ((IsTargetedVersion) && (useCustomSound))
    {
        if (useWavFormat)
        {
            //Do the reflection to get the new Sound property added to the toast
            SetProperty(toast, "Sound", new Uri("MyToastSound.wav", UriKind.RelativeOrAbsolute));
        }
        else
        {
            //Do the reflection to get the new Sound property added to the toast
            SetProperty(toast, "Sound", new Uri("MyToastSound.mp3", UriKind.RelativeOrAbsolute));
        }
    }
    // For a silent toast, check the version and then set the Sound property to an empty string.
    else if ((IsTargetedVersion) && (doSilentToast))
    {
        //Do the reflection to get the new Sound property added to the toast
        SetProperty(toast, "Sound", new Uri("", UriKind.RelativeOrAbsolute));
    }


    toast.Show();
}

若要对通过云服务启动的 Toast 使用自定义声音,您仅需在 XML 负载中包含 Sound 元素。若要启动静音 Toast,您可以使用“静音”属性并将其设置为“true”。以下示例向您显示了如何为使用自定义声音的 Toast 创建 XML 负载。它将重用上一个示例中的版本检查帮助器方法 IsTargetedVersion

public void ShowToastWithCloudService(bool useCustomSound, bool useWavFormat, bool doSilentToast)
{
    StringBuilder toastMessage = new StringBuilder();
    toastMessage.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?><wp:Notification xmlns:wp=\"WPNotification\"><wp:Toast>");
    toastMessage.Append("<wp:Text1>Toast Title</wp:Text1>");
    toastMessage.Append("<wp:Text2>Toast Content</wp:Text2>");
    if ((IsTargetedVersion) && (useCustomSound))
    {
        if (useWavFormat)
        {
            toastMessage.Append("<wp:Sound>MyToastSound.wav</wp:Sound>");
        }
        else
        {
            toastMessage.Append("<wp:Sound>MyToastSound.mp3</wp:Sound>");
        }
    }
    else if ((IsTargetedVersion) && (doSilentToast))
    {
        toastMessage.Append("<wp:Sound Silent=\"true\"/>");
    }
    toastMessage.Append("</wp:Toast></wp:Notification>");
}

用于设置 Parameter 属性的 Toast 通知只能发送到运行 Windows Phone OS 7.1 或更高版本的设备。将具有 Parameter 属性的通知发送到 Windows Phone OS 7.0 设备将导致 PushErrorTypePayloadFormatInvalid 错误,并且通道会关闭。

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈
显示:
© 2014 Microsoft. 版权所有。