0

我有一个使用后台任务进行动态磁贴更新的 Windows 应用商店应用程序。当我以任何方式激活应用程序时(单击活动磁贴,切换回应用程序等),我想清除活动磁贴(我有一个数字,我想将其更改为零)。

更具体一点,我运行应用程序,切换到另一个应用程序或桌面,然后切换到星形屏幕,我在动态磁贴上看到一个数字。我单击动态磁贴,我被带到应用程序,我希望动态磁贴清除。与电子邮件应用程序相同的功能。

我在 App.xaml.cs 中尝试了 OnActivated 方法,但它似乎没有在任何时候被调用(我在那里放置了一个 throw new NotImplementeExeption 并且应用程序永远不会崩溃)。

4

2 回答 2

0

我想这种行动的更好的地方是OnLaunched方法。每次应用程序启动时都会调用它。

更新:嗯,似乎你应该对这两种OnActivated方法做出反应OnLaunched

OnLaunched - 在应用程序启动时调用。重写此方法以执行应用程序初始化并在关联的 Window 中显示初始内容。

在应用程序启动时OnLaunched将被调用。但是当您切换到另一个应用程序然后返回时OnActivated应该调用:

OnActivated - 当应用程序通过正常启动以外的方式激活时调用。

于 2012-12-18T10:24:06.320 回答
0

你应该把它放在 OnLaunched 方法中,你只需要确定在哪里。

 protected async override void OnLaunched(LaunchActivatedEventArgs args)
    {
        var rootFrame = new Frame();
        // Do not repeat app initialization when already running, just ensure that
        // the window is active
        if (args.PreviousExecutionState == ApplicationExecutionState.Running)
        {
           //....
        }

        if (args.PreviousExecutionState == ApplicationExecutionState.ClosedByUser)
        {
            /....
        }
        if (!String.IsNullOrEmpty(args.Arguments))
        {
                //....

        }
        if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
        {
            //....
        }
        if (args.PreviousExecutionState == ApplicationExecutionState.NotRunning)
        {
            //.....
        }
        TileUpdateManager.CreateTileUpdaterForApplication().Clear();
        BadgeUpdateManager.CreateBadgeUpdaterForApplication().Clear();

        SettingsPane.GetForCurrentView().CommandsRequested += OnCommandsRequested;
        // Create a Frame to act navigation context and navigate to the first page

        if (!rootFrame.Navigate(typeof(MainPage)))
        {
            throw new Exception("Failed to create initial page");
        }

        // Place the frame in the current Window and ensure that it is active
        Window.Current.Content = rootFrame;
        Window.Current.Activate();
    }

如果您查看代码,您的应用程序关闭/暂停的原因有多种。因此,确定在哪些情况下要运行解码代码以更新动态磁贴中的数字,将其放在 if 中,它应该可以工作。

于 2012-12-18T11:59:34.240 回答