具有两种 onActivated 侦听器的 UWP c# 应用程序 - 通过通知激活

UWP c# app with two kinds of onActivated listeners available - Activation by notification

目前在我的应用程序中,我正在注册一个要执行的 onActivated 侦听器并检查我的共享 activity,如下所示:

        Window.Current.Activated += Current_Activated;

使用如下方法查看激活状态:

private async void Current_Activated(object sender, Windows.UI.Core.WindowActivatedEventArgs e)
        {
if (e.WindowActivationState == CoreWindowActivationState.Deactivated)
            {

            }
            else
            {}                       }

现在我想通过后台任务的通知实现激活。单击通知当前正在打开应用程序或将其带到前台(如果已打开)。这是标准行为。现在我想通过通知在激活时执行一些代码,但我的方法从未被调用,而且我并不完全理解 Microsoft 在线 material,因为它看起来相对简单。

我正在这样注册监听器:

        (Application.Current as App).Activated = new EventHandler<IActivatedEventArgs>(App_Activated);

永远不会调用的方法如下所示:

private void App_Activated(object sender, IActivatedEventArgs e)
        {                                                        }

这两个是相互矛盾的吗?我可以做些什么来将通知激活实施到我现有的方法中吗?

我已经通读了这一页以及更多页面:https://blogs.msdn.microsoft.com/tiles_and_toasts/2015/07/08/quickstart-sending-a-local-toast-notification-and-handling-activations-from-it-windows-10/

即使是我下载的测试应用程序,我也不太明白需要做什么。除此之外,我不需要将通知中的任何信息传递给主 activity。只需打开它并执行一个刷新页面的命令,但仅在通知激活时执行。

您应该只覆盖 App.xaml.cs 中的 OnActivated(IActivatedEventArgs args) 方法并检查 args.Kind 属性 是否为 ActivationKind.ToastNotification.

您可以找到有关处理 UWP 应用程序激活的更多信息here

正如 Marian 所说,您需要覆盖 App.xaml.cs class 中的 OnActivated 方法。 OnActivated 方法在你的 toast 被点击时被调用,它包含 toast 参数,这样你就知道点击了什么 toast。请注意,您必须在 OnActivated 中执行与您在 OnLaunched 中相同的框架初始化,因为如果用户在您的应用程序关闭时单击 toast,则只会调用 OnActivated 方法 -不会调用 OnLaunched。

此快速入门准确解释了如何处理 toast 激活,并包含完整的代码示例:Quickstart: Sending a local Toast notification