我的头开始旋转:我有一个Windows Phone 8.1通用应用程序。在App.xaml.cs中,我实现了以下方法:
public sealed partial class App : Application
{
public static bool isSuspended = false;
public App()
{
this.InitializeComponent();
this.Suspending += this.OnSuspending;
this.Resuming += this.OnResuming;
}
private void OnSuspending(object sender, SuspendingEventArgs e)
{
SuspendingDeferral deferral = e.SuspendingOperation.GetDeferral();
App.isSuspended = true;
// TODO: Save application state and stop any background activity
deferral.Complete();
}
private async void OnResuming(object sender, object e)
{
App.isSuspended = false;
}
}
在我的MainPageVM(它是一个视图模型)中,我实现了以下方法:
private async void onPushNotificationReceived(PushNotificationChannel sender, PushNotificationReceivedEventArgs args)
{
switch (args.NotificationType)
{
case PushNotificationType.Toast:
if (App.isSuspended)
{
args.ToastNotification.Activated += this.toastNotification_Activated;
}
else
{
args.Cancel = true;
this.manageNotification(args.ToastNotification.Content)
}
break;
case PushNotificationType.Raw:
break;
}
}
private void toastNotification_Activated(ToastNotification sender, object args)
{
ToastActivatedEventArgs tArgs = (ToastActivatedEventArgs)args;
this.manageNotification(tArgs.Arguments);
}
当应用程序被杀或应用程序处于前台时,它运行良好。当应用程序处于后台时出现问题:当用户点击通知时,toastNotification_Activated
永远不会被提升。
我错过了什么?
答案 0 :(得分:2)
当您的应用已暂停时,表示它未运行(app lifecycle at MSDN)。在这种情况下,当通知发出时,它不会被您声明的事件拦截,例如MSDN says:
注意此过程仅适用于正在运行的应用。当应用程序未运行且未实现处理程序时系统发送的通知将正常传递 - 更新磁贴,显示toast,并将原始通知传递给后台任务(如果已实现)。
如果您想在后台处理通知,那么您可以考虑声明Background Task for it。