Показать уведомление о завершении фоновой загрузки

Я использую BackgroundUploader для загрузки видео, и мне нужно показать уведомление, когда загрузка завершена, даже если приложение находится в фоновом режиме. для этого я использовал всплывающее уведомление при успешной загрузке, оно работает, но только когда приложение находится на переднем плане (активном), в противном случае оно отображается, когда я активирую приложение, нажав. Я думаю, это из-за приостановленного состояния приложения. мой код

            if (response.StatusCode == 200)
            {
                ToastTemplateType toastTemplate = ToastTemplateType.ToastText01;
                XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);

                XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
                toastTextElements[0].AppendChild(toastXml.CreateTextNode("Video uploaded"));

                ToastNotification toast = new ToastNotification(toastXml);
                ToastNotificationManager.CreateToastNotifier().Show(toast);

                //some more work here
            }

Теперь я пытаюсь зарегистрировать фоновую задачу, которая показывает уведомление и некоторые другие мелочи после завершения загрузки видео.

Где зарегистрировать фоновую задачу и какой триггер мне использовать?

или есть ли другое возможное решение для этого?

Обновить-

Я использую следующий код для регистрации таймера триггера с фоновой задачей

            string name = "UploadSuccess";
            bool registered = false;
            foreach (var task in BackgroundTaskRegistration.AllTasks)
            {
                //task.Value.Unregister(true);
                if (task.Value.Name.Equals(name))
                    registered = true;
            }
            if (registered == false)
            {
                var builder = new BackgroundTaskBuilder();
                builder.Name = name;
                builder.TaskEntryPoint = "VideoUploadSuccessTask.UploadSuccess";
                TimeTrigger t = new TimeTrigger(15, false);
                builder.SetTrigger(t);
                //builder.SetTrigger(new SystemTrigger(SystemTriggerType.ServicingComplete, false));

                var ret = builder.Register();
            }

и работает при отладке, но никогда не срабатывает автоматически:(

1 ответ

Решение

В Windows 8 лучшее, что вы можете сделать, когда дело касается фоновых задач, - это запуск по таймеру, но это дает вам разрешение всего 15 минут. Это известный недостаток для этого сценария.

К счастью, это решено в Windows 8.1, где API BackgroundTransfer позволяет настроить всплывающее уведомление, которое будет отображаться после завершения передачи. См. Свойства BackgroundUploader.SuccessToastNotification и FailureToastNotification.

Об этом я подробнее расскажу в главе 4 предварительного просмотра второго издания моей бесплатной электронной книги.

Другие вопросы по тегам