代码之家  ›  专栏  ›  技术社区  ›  lhan

WP8 OnNavigatedTo在点击Toast Notification(吐司通知)后触发两次?

  •  2
  • lhan  · 技术社区  · 11 年前

    我的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 在querystring上,这样我就可以正确地处理“恢复”。然而,当我点击出现的Toast通知时 OnNavigatedTo 事件 在Page2.xaml上激发两次 .

    第一次 进入主页面 点击Toast后在Page2.xaml上触发,没有查询字符串参数,但紧接着,它用我的 来自Toast 参数。

    为什么它开了两枪?这是意料之中的事吗?如果我移除 NavigationUri 我的财产 toast ,点击Toast只会将应用程序带回Page1.xaml,这不是我想要的。

    以前有人见过这个吗?

    2 回复  |  直到 11 年前
        1
  •  5
  •   Alaa Masoud    11 年前

    Fast Resume 已启用。您必须了解它是如何工作的,才能决定如何处理用户体验。从MSDN网站:

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

    因此,基本上点击toast将导致创建Page2的新实例,因此 NavigatedTo 被调用时没有查询字符串。由于您的toast有一个深度链接,将请求另一个导航,从而创建Page2的另一个实例,并且 导航到 与通话 fromToast=true 查询字符串。

    您可以通过检查来确定导航模式 e.NavigationMode 所有物应该是 NavigationMode.Reset 那是第一次 NavigationMode.New 第二次。

    还要注意,默认情况下,从祝酒词中启动应用程序会清除后台,这样你就会让你的用户进入一个无限循环的祝酒词。

    关于简历的快速工作以及如何处理不同的情况,请阅读以下内容: Fast app resume for Windows Phone 8

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

        2
  •  0
  •   Abhishek    10 年前

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