我尝试向Windows Phone 8.1设备发送带有参数的Toast通知,因此当用户点击Toast时,应用会在应用中显示特定页面,如本MSDN文章中所述https://msdn.microsoft.com/library/windows/apps/jj662938(v=vs.105).aspx
这是我用来添加参数的片段:
<wp:Param>?cmd=command1 </wp:Param>
这是我在应用程序中阅读的方式:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e){
base.OnNavigatedTo(e);
string strVal1 = this.NavigationContext.QueryString["cmd"];
}
进行这些更改后,它可以正常工作,但仅适用于此第一次通知。在所有后续通知中,无论我从服务器发送了什么,在应用程序中读取的参数值都与第一次通知中的相同。
以下是一个例子:
<wp:Param>?cmd=command1 </wp:Param>
this.NavigationContext.QueryString(&#34; cmd&#34;)中的值为command1,as它应该是。<wp:Param>?cmd=command2 </wp:Param>
this.NavigationContext.QueryString(&#34; cmd&#34;)中的cmd值仍然作为&#34; command1&#34;返回。而不是命令2应该是。在我强行重启应用程序之前,它对所有后续通知都有效。以下是我尝试的内容:
问题:
答案 0 :(得分:1)
找出问题所在。重新启动应用程序时会触发两个OnNavigated事件。第一个类型为System.Windows.Navigation.NavigationMode.Reset
,它具有重置旧页面的数据(在我的情况下,使用旧通知中的数据)。第二个是System.Windows.Navigation.NavigationMode.New
,并且包含新通知中的数据。
简单检查导航模式以确保其类型。新修复了问题:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e){
base.OnNavigatedTo(e);
if (e.NavigationMode == System.Windows.Navigation.NavigationMode.New)){
// custom navigation logic based on the data within <wp:Param/>
}
}