Display local toast notification

2019-03-13 02:44发布

I want to develop a universal app for Windows Phone 8.1 which contains a local “Notification”.

What I want to do is to show all messages to the user (error, information, warnings) in a kink of toast control. Everything is done locally without going through the standard notification system. There are several system that work on Windows Phone 8:

But it's not possible to include those libraries on windows phone 8.1 project.

Does anyone know another method to display "local" toasts?

2条回答
Root(大扎)
2楼-- · 2019-03-13 03:10

With the help of the @msimons response and the following url : http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh868254.aspx I succeed to display my notifications.

For those who need it, here is my final method :

private void ShowToastNotification(String message)
    {
        ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01;
        XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);

        // Set Text
        XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
        toastTextElements[0].AppendChild(toastXml.CreateTextNode(message));

        // Set image
        // Images must be less than 200 KB in size and smaller than 1024 x 1024 pixels.
        XmlNodeList toastImageAttributes = toastXml.GetElementsByTagName("image");
        ((XmlElement)toastImageAttributes[0]).SetAttribute("src", "ms-appx:///Images/logo-80px-80px.png");
        ((XmlElement)toastImageAttributes[0]).SetAttribute("alt", "logo");

        // toast duration
        IXmlNode toastNode = toastXml.SelectSingleNode("/toast");
        ((XmlElement)toastNode).SetAttribute("duration", "short");

        // toast navigation
        var toastNavigationUriString = "#/MainPage.xaml?param1=12345";
        var toastElement = ((XmlElement)toastXml.SelectSingleNode("/toast"));
        toastElement.SetAttribute("launch", toastNavigationUriString);

        // Create the toast notification based on the XML content you've specified.
        ToastNotification toast = new ToastNotification(toastXml);

        // Send your toast notification.
        ToastNotificationManager.CreateToastNotifier().Show(toast);
    }

I tested on a universal application windows phone 8.1.

And don't forget to edit "Package.appxmanifest" and activate notifications. The capability to raise toast notifications is declared in your app's package.appxmanifest file. If you use the Microsoft Visual Studio manifest editor, simply set the Toast capable option to "Yes" in the Notification section of the Application tab.

查看更多
姐就是有狂的资本
3楼-- · 2019-03-13 03:13

You could use a local notification that appears when your app is running.

ToastTemplateType toastTemplateXml = ToastTemplateType.ToastImageAndText01; 
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplateXml);

You'll then need to populate the XML returned by GetTemplateContent

<toast>
    <visual>
        <binding template="ToastImageAndText01">
            <image id="img" src=""/>
            <text id="txt"></text>
        </binding>
    </visual>
</toast>

Supply the content of your toast in the XML DOM. The image is relevant only for Windows 8.1.

Specify it's launch parameters

((XmlElement)toastNode).SetAttribute("launch", "{\"type\":\"toast\",\"param1\":\"1\",\"param2\":\"2\"}");

Create the toast object:

ToastNotification toast = new ToastNotification(toastXml);

and finally display the toast.

ToastNotificationManager.CreateToastNotifier().Show(toast);

Also, If you want to use a third party control to display the toast then you could consider writing a Windows Phone 8.1 Silverlight app.

查看更多
登录 后发表回答