Toast Notification Arguments打开Web浏览器

时间:2012-09-24 19:06:45

标签: microsoft-metro

我需要发送我的toast通知参数并打开Web浏览器。这是我的代码:

private void DoNotification()
    {
        var notifications = serviceClient.GetNotificationsAsync(App.CurrentRestaurantLocation.ID);
        foreach (RestaurantNotification note in notifications.Result)
        {
            IToastNotificationContent toastContent = null;
            IToastText02 templateContent = ToastContentFactory.CreateToastText02();
            templateContent.TextHeading.Text = note.Title;
            templateContent.TextBodyWrap.Text = note.Message;
            toastContent = templateContent;
            // Create a toast, then create a ToastNotifier object to show
            // the toast
            ToastNotification toast = toastContent.CreateNotification();

            toast.Activated += toast_Activated;
            // If you have other applications in your package, you can specify the AppId of
            // the app to create a ToastNotifier for that application
            ToastNotificationManager.CreateToastNotifier().Show(toast);
        }
    }

    async void toast_Activated(ToastNotification sender, object args)
    {
        await Launcher.LaunchUriAsync(new Uri("http://www.google.com"));
    }

我的激活事件发生了,但是没有打开Web浏览器。该启动器代码在没有Toast通知的情况下工作。

如何使用网址填充args?我的网络服务返回note.RedirectUrl,我想在那里提供它。

1 个答案:

答案 0 :(得分:0)

不使用Activated上的ToastNotification事件处理程序,而是使用主Application类中的OnLaunched处理程序(允许轻松访问启动上下文)。

对于要调用的处理程序,需要在toast XML中提供launch argument。使用上面的代码,您可以将参数添加到IToastContent对象,如下所示:

toastContent.Launch = note.RedirectUrl;

然后在应用程序的OnLaunched方法中,应用程序可以检索启动参数:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    if (!String.IsNullOrEmpty(args.Argument)) {
        var redirectUrl = args.Argument;
    }
}

LaunchUriAsync使用时,调用OnLaunched应该按预期工作。