WP8 OnNavigatedTo点击Toast Notification后会激活TWICE?

时间:2013-09-27 01:44:44

标签: windows-phone-8 notifications windows-phone toast

我的Toast通知中有一个奇怪的问题(或者可能是我误解的预期行为)。我想要的只是让toast导航回用户点击“开始”按钮时所在的页面。

情境:

用户打开应用程序,它们显示为Page1.xaml。用户点击按钮导航到Page2.xaml。从这里,他们点击“开始”按钮。这是我在Page2.xaml.cs上设置的Toast通知:

Microsoft.Phone.Shell.ShellToast toast = new Microsoft.Phone.Shell.ShellToast();
toast.Content = "App is still running!";
toast.Title = AppResources.ApplicationTitle;
toast.NavigationUri = new Uri("/Pages/Page2.xaml?fromToast=true", UriKind.Relative);
toast.Show();

我在查询字符串上传递fromToast,以便我可以正确处理“恢复”。但是,当我点按显示的Toast通知时,我的OnNavigatedTo事件会在Page2.xaml 上触发两次。

点击Toast后第一次{Page 1}}在Page2.xaml上触发,没有查询字符串参数,但之后,它再次使用我的OnNavigatedTo参数触发。

为什么要开两次?这是预期的吗?如果我从我的fromToast中移除了NavigationUri属性,则点击Toast只会将应用返回到Page1.xaml,这不是我想要的。

有没有人见过这个?

2 个答案:

答案 0 :(得分:5)

这是启用Fast Resume时的正常行为。您必须了解它如何工作以决定您希望如何处理用户体验。来自MSDN网站:

  

使用“快速恢复”,当应用程序恢复时,系统会为启动点的目标创建一个新的页面实例,此页面将放置在应用程序现有的后台堆栈之上。

所以基本上点击toast会导致创建一个新的Page2实例,因此调用NavigatedTo时没有查询字符串。由于您的toast具有深层链接,因此将请求另一个导航,从而导致创建另一个Page2实例,并使用NavigatedTo查询字符串调用fromToast=true

您可以通过检查e.NavigationMode属性来确定导航模式。它应该是第一次NavigationMode.ResetNavigationMode.New第二次。

另请注意,默认情况下,从吐司启动应用程序将清除后台堆栈,因此您将使用户进入无限循环的祝酒词。

有关简历如何快速以及如何处理不同方案的详细信息,请访问:Fast app resume for Windows Phone 8

我的建议是,您并不需要告诉用户应用程序仍在运行。这是WP中应用程序的默认行为,大多数用户已经知道。

答案 1 :(得分:0)

为了给Alaa Masoud的答案添加一件事,如果你用Page2的toast启动应用程序,导航URI是" /Pages/Page2.xaml?fromToast = true",并且如果您在此页面上再次暂停您的应用程序(第2页)并使用Page2 toast启动,则相应的导航模式将为“重置和刷新”。