コード例 #1
0
 public void TestCleanUp()
 {
     if (BackgroundTaskHelper.IsBackgroundTaskRegistered("TaskName"))
     {
         BackgroundTaskHelper.Unregister("TaskName");
     }
 }
コード例 #2
0
        /// <summary>
        /// 注销后台任务
        /// </summary>
        /// <param name="type">类型</param>
        public void UnRegisterBackgroundTask(string type)
        {
            string backgroundTaskName = $"{type}NotificationTask";

            if (BackgroundTaskHelper.IsBackgroundTaskRegistered(backgroundTaskName))
            {
                BackgroundTaskHelper.Unregister(backgroundTaskName);
            }
        }
コード例 #3
0
        /// <summary>
        /// Registers a particular bg tasks specified by <paramref name="backgroundTask"/>
        /// </summary>
        /// <param name="backgroundTask">The background task to register</param>
        /// <param name="restart">Indicates if the registration of the bg task is mandatory(True by default)</param>
        public static void RegisterBackgroundTask(BackgroundTaskType backgroundTask, int bgTaskInterval = 0, bool restart = true)
        {
            string             bgTaskName;
            Type               bgTaskType;
            IBackgroundTrigger trigger;
            var conditions = new List <IBackgroundCondition>();

            switch (backgroundTask)
            {
            case BackgroundTaskType.ANY:
                throw new ArgumentException("Is not allowed to register all bg tasks at the same time");

            case BackgroundTaskType.SYNC:
                bgTaskName = nameof(SyncBackgroundTask);
                bgTaskType = typeof(SyncBackgroundTask);
                trigger    = new TimeTrigger((uint)bgTaskInterval, false);
                conditions.Add(new SystemCondition(SystemConditionType.FreeNetworkAvailable));
                conditions.Add(new SystemCondition(SystemConditionType.InternetAvailable));
                break;

            case BackgroundTaskType.MARK_AS_COMPLETED:
                bgTaskName = nameof(MarkAsCompletedBackgroundTask);
                bgTaskType = typeof(MarkAsCompletedBackgroundTask);
                trigger    = new ToastNotificationActionTrigger();
                break;

            default:
                throw new ArgumentOutOfRangeException($"Provided bg task {backgroundTask} does not exists");
            }

            bool isBgTaskAlreadyRegistered = BackgroundTaskHelper.IsBackgroundTaskRegistered(bgTaskType);

            if (isBgTaskAlreadyRegistered && !restart)
            {
                return;
            }

            if (isBgTaskAlreadyRegistered)
            {
                UnregisterBackgroundTask(backgroundTask);
            }

            if (bgTaskInterval <= 0 && backgroundTask != BackgroundTaskType.MARK_AS_COMPLETED)
            {
                return;
            }

            BackgroundTaskHelper.Register(
                bgTaskName,
                trigger,
                false,
                true,
                conditions.ToArray());
        }
コード例 #4
0
        private bool IsBackgroundTaskRegistered(string taskName)
        {
            if (BackgroundTaskHelper.IsBackgroundTaskRegistered(taskName))
            {
                // Background task already registered.
                StatusMessage.Text = "Background Task already registered";
                return(true);
            }

            return(false);
        }
コード例 #5
0
        public void Test_BackgroundTaskHelper_IsBackgroundTaskRegistered_WithValidTask()
        {
            BackgroundTaskRegistration registeredTask = BackgroundTaskHelper.Register("TaskName", new TimeTrigger(15, true));

            if (registeredTask == null)
            {
                Assert.Inconclusive("Task failed to register");
            }

            Assert.IsTrue(BackgroundTaskHelper.IsBackgroundTaskRegistered("TaskName"));
        }
コード例 #6
0
        //--------------------------------------------------------Misc Methods:---------------------------------------------------------------\\
        #region --Misc Methods (Public)--


        #endregion

        #region --Misc Methods (Private)--
        /// <summary>
        /// Registers the socket background task if necessary.
        /// </summary>
        public async static Task registerBackgroundTask()
        {
            if (BackgroundTaskHelper.IsBackgroundTaskRegistered(BACKGROUND_TASK_NAME))
            {
                removeBackgroundTask();
            }
            await BackgroundExecutionManager.RequestAccessAsync();

            socketTask = BackgroundTaskHelper.Register(BACKGROUND_TASK_NAME, BACKGROUND_TASK_ENTRY_POINT, new SocketActivityTrigger(), false, true);

            Logger.Info("Registered the " + BACKGROUND_TASK_NAME + " background task.");
        }
コード例 #7
0
        public void Test_BackgroundTaskHelper_Unregister()
        {
            BackgroundTaskHelper.Register("TaskName", new TimeTrigger(15, true));

            if (!BackgroundTaskHelper.IsBackgroundTaskRegistered("TaskName"))
            {
                Assert.Inconclusive("Task failed to register!");
            }

            BackgroundTaskHelper.Unregister("TaskName");

            Assert.IsFalse(BackgroundTaskHelper.IsBackgroundTaskRegistered("TaskName"));
        }
コード例 #8
0
        public void UpdateWorkRegister()
        {
            var Timer_Condition = new IBackgroundCondition[] {
                new SystemCondition(SystemConditionType.FreeNetworkAvailable)
            };

            bool HasRegistered = BackgroundTaskHelper.IsBackgroundTaskRegistered(typeof(TileRefreshUtils));

            if (Enabled)
            {
                BackgroundTaskHelper.Register(typeof(TileRefreshUtils), new TimeTrigger(TimerSpan, false), false, true, Timer_Condition);
            }
            else if (HasRegistered)
            {
                BackgroundTaskHelper.Unregister(typeof(TileRefreshUtils));
            }
        }
        private async void RegisterButton_Click(object sender, RoutedEventArgs e)
        {
            if (BackgroundTaskHelper.IsBackgroundTaskRegistered("TestBackgroundTaskName"))
            {
                // Background task already registered.
                StatusMessage.Text = "Background Task already registered";
                return;
            }

            // Check for background access.
            await BackgroundExecutionManager.RequestAccessAsync();

            BackgroundTaskHelper.Register("TestBackgroundTaskName", new TimeTrigger(15, false));

            // If registering Multi-Process Background task
            // BackgroundTaskHelper.Register("TestName", "TestEntryPoint", new TimeTrigger(15, false), false, true, new SystemCondition(SystemConditionType.InternetAvailable));
            StatusMessage.Text = "Background Task registered";
        }
コード例 #10
0
        private void RegisterBackgroundTasks()
        {
            // Remove old Background Tasks
            if (BackgroundTaskHelper.IsBackgroundTaskRegistered("NewEpisodesBackgroundTask"))
            {
                BackgroundTaskHelper.Unregister("NewEpisodesBackgroundTask");
            }

            // Check if Background Task is already registered and register new ones
            if (!BackgroundTaskHelper.IsBackgroundTaskRegistered(typeof(NewEpisodesV2BackgroundTask)))
            {
                BackgroundTaskHelper.Register(
                    nameof(NewEpisodesV2BackgroundTask),
                    new TimeTrigger(15, false),
                    conditions: new SystemCondition(SystemConditionType.InternetAvailable)
                    );
            }
        }
コード例 #11
0
        private async void NetworkStateChangeLoginSetter(object original_sender, RoutedEventArgs e)
        {
            var sender = original_sender as ToggleSwitch;

            MyNetworkStateChangeLoginSetting.ApplySetting(sender.IsOn);
            if (sender.IsOn)
            {
                if (!BackgroundTaskHelper.IsBackgroundTaskRegistered(NameManager.LIVETILETASK_NetWorkChanged))
                {
                    await BackgroundExecutionManager.RequestAccessAsync();

                    BackgroundTaskHelper.Register(
                        NameManager.LIVETILETASK_NetWorkChanged,
                        typeof(TileRefresh.TileRefreshUtils).FullName,
                        new SystemTrigger(SystemTriggerType.NetworkStateChange, false));
                }
                //RefreshLoginSetting_UI.IsEnabled = true;
                //await App.RegisterLiveTileTask(
                //    NameManager.LIVETILETASK_UserPresent,
                //    typeof(TileRefresh.TileRefreshUtils).FullName,
                //    new SystemTrigger(SystemTriggerType.UserPresent, false),
                //    null
                //);
            }
            else
            {
                //RefreshLoginSetting_UI.IsOn = false;
                //MyRefreshLoginSetting.ApplySetting(false);
                //RefreshLoginSetting_UI.IsEnabled = false;
                //if (BackgroundTaskHelper.IsBackgroundTaskRegistered(NameManager.LIVETILETASK_NetWorkChanged))
                //{
                //    BackgroundTaskHelper.Unregister(NameManager.LIVETILETASK_NetWorkChanged);
                //}
                //await App.RegisterLiveTileTask(
                //    NameManager.LIVETILETASK_UserPresent,
                //    typeof(TileRefresh.TileRefreshUtils).FullName,
                //    null,
                //    null
                //);
            }
        }
コード例 #12
0
        /// <summary>
        /// 注册后台任务
        /// </summary>
        /// <param name="type">注册类型</param>
        /// <returns></returns>
        public async Task <bool> RegisterBackgroundTask(string type)
        {
            string backgroundTaskName = $"{type}NotificationTask";

            if (BackgroundTaskHelper.IsBackgroundTaskRegistered(backgroundTaskName))
            {
                return(true);
            }
            var status = await BackgroundExecutionManager.RequestAccessAsync();

            if (status.ToString().Contains("Allowed"))
            {
                BackgroundTaskHelper.Register(backgroundTaskName, $"BiliBili_Notification.{type}Notification", new TimeTrigger(15, false), false, true, new SystemCondition(SystemConditionType.InternetAvailable));
                return(true);
            }
            else
            {
                new TipPopup("需要开启后台通知").ShowError();
                return(false);
            }
        }
コード例 #13
0
ファイル: App.xaml.cs プロジェクト: RomanGL/OWArcadeToday-UWP
        /// <summary>
        /// Performs a registration of a background task.
        /// </summary>
        private async void RegisterBackgroundTask()
        {
            const string taskName       = "ArcadeBackgroundTask";
            const string taskEntryPoint = "BackgroundTasks.ArcadeBackgroundTask";

            var accessStatus = await BackgroundExecutionManager.RequestAccessAsync();

            var isRegistered = BackgroundTaskHelper.IsBackgroundTaskRegistered(taskName);

            if (accessStatus == BackgroundAccessStatus.DeniedByUser ||
                accessStatus == BackgroundAccessStatus.DeniedBySystemPolicy ||
                isRegistered)
            {
                return;
            }

            var trigger = new TimeTrigger(120, false);

            BackgroundTaskHelper.Register(taskName,
                                          taskEntryPoint,
                                          trigger,
                                          conditions: new SystemCondition(SystemConditionType.InternetAvailable));
        }
コード例 #14
0
ファイル: App.xaml.cs プロジェクト: BeanLiu1994/NJU_Login
        private async void RegisterWorks()
        {
            foreach (var t in BackgroundTaskRegistration.AllTasks)
            {
                t.Value.Unregister(true);
            }

            if (!BackgroundTaskHelper.IsBackgroundTaskRegistered(NameManager.LIVETILETASK_Timer))
            {
                await BackgroundExecutionManager.RequestAccessAsync();

                BackgroundTaskHelper.Register(
                    NameManager.LIVETILETASK_Timer,
                    typeof(TileRefreshUtils).FullName,
                    new TimeTrigger(15, false));
            }

            if (!BackgroundTaskHelper.IsBackgroundTaskRegistered(NameManager.LIVETILETASK_NetWorkChanged))
            {
                await BackgroundExecutionManager.RequestAccessAsync();

                BackgroundTaskHelper.Register(
                    NameManager.LIVETILETASK_NetWorkChanged,
                    typeof(TileRefreshUtils).FullName,
                    new SystemTrigger(SystemTriggerType.NetworkStateChange, false));
            }
            if (!BackgroundTaskHelper.IsBackgroundTaskRegistered(NameManager.LIVETILETASK_UserPresent))
            {
                await BackgroundExecutionManager.RequestAccessAsync();

                BackgroundTaskHelper.Register(
                    NameManager.LIVETILETASK_UserPresent,
                    typeof(TileRefreshUtils).FullName,
                    new SystemTrigger(SystemTriggerType.SessionConnected, false)
                    );
            }
        }
コード例 #15
0
        /// <summary>
        /// 在应用程序由最终用户正常启动时进行调用。
        /// 将在启动应用程序以打开特定文件等情况下使用。
        /// </summary>
        /// <param name="e">有关启动请求和过程的详细信息。</param>
        protected override async void OnLaunched(LaunchActivatedEventArgs e)
        {
            if (e.Kind == ActivationKind.Protocol)
            {
                return;
            }


            var t = Task.Run(async() =>
            {
                if (BackgroundTaskHelper.IsBackgroundTaskRegistered(Consts.PodcastTaskName))
                {
                    // Background task already registered.
                    //Unregister
                    BackgroundTaskHelper.Unregister(Consts.PodcastTaskName);
                }
                // Check for background access (optional)
                await BackgroundExecutionManager.RequestAccessAsync();

                // Register (Multi Process) w/ Conditions.
                BackgroundTaskHelper.Register(Consts.PodcastTaskName, typeof(PodcastsFetcher).FullName, new TimeTrigger(Settings.Current.FetchInterval, false), true, true, new SystemCondition(SystemConditionType.InternetAvailable));
            });


            if (e.PrelaunchActivated == false)
            {
                TryDisablePrelaunch();
                if (Window.Current.Content == null)
                {
                    CreateRootFrame(e.PreviousExecutionState);
                }

                if (e.Arguments.StartsWith("as-music:", StringComparison.InvariantCultureIgnoreCase) && Uri.TryCreate(e.Arguments, UriKind.Absolute, out var u))
                {
                    await NavigateByProtocol(u);

                    return;
                }

                if (rootFrame.Content == null)
                {
                    // When the navigation stack isn't restored navigate to the first page,
                    // configuring the new page by passing required information as a navigation
                    // parameter
                    if (Settings.Current.WelcomeFinished)
                    {
                        rootFrame.Navigate(typeof(MainPage), e.Arguments);
                    }
                    else
                    {
                        rootFrame.Navigate(typeof(WelcomePage), e.Arguments);
                    }
                }
                // 确保当前窗口处于活动状态
                Window.Current.Activate();
            }
            else
            {
                CreateRootFrame(e.PreviousExecutionState);

                if (e.Arguments.StartsWith("as-music:", StringComparison.InvariantCultureIgnoreCase) && Uri.TryCreate(e.Arguments, UriKind.Absolute, out var u))
                {
                    await NavigateByProtocol(u);

                    return;
                }

                if (rootFrame.Content == null)
                {
                    // When the navigation stack isn't restored navigate to the first page,
                    // configuring the new page by passing required information as a navigation
                    // parameter
                    if (Settings.Current.WelcomeFinished)
                    {
                        rootFrame.Navigate(typeof(MainPage), e.Arguments);
                    }
                    else
                    {
                        rootFrame.Navigate(typeof(WelcomePage), e.Arguments);
                    }
                }
            }
        }
コード例 #16
0
 public void Test_BackgroundTaskHelper_IsBackgroundTaskRegistered_NoTask()
 {
     Assert.IsFalse(BackgroundTaskHelper.IsBackgroundTaskRegistered("TaskName"));
 }
コード例 #17
0
        private async Task PerformAsyncWork(string path)
        {
            App.IsLoading = true;

            // Set the app language
            ApplicationLanguages.PrimaryLanguageOverride =
                string.IsNullOrEmpty(SettingsService.Instance.CurrentAppLanguage)
                    ? ApplicationLanguages.Languages[0]
                    : SettingsService.Instance.CurrentAppLanguage;

            // Set the on back requested event
            SystemNavigationManager.GetForCurrentView().BackRequested += OnBackRequested;

            // Navigate to the first page
            await HandleProtocolAsync(path);

            // Handle donation logic
            await MonitizeService.Instance.InitProductInfoAsync();

            // Test Version and tell user app upgraded
            HandleNewAppVersion();

            // Clear the unread badge
            BadgeUpdateManager.CreateBadgeUpdaterForApplication().Clear();

            // The methods below are sorted into try catch groups. many of them can fail, but they are not important
            try
            {
                // Get the store and check for app updates
                var updates = await StoreContext.GetDefault().GetAppAndOptionalStorePackageUpdatesAsync();

                // If we have updates navigate to the update page where we
                // ask the user if they would like to update or not (depending
                // if the update is mandatory or not).
                if (updates.Count > 0)
                {
                    await new PendingUpdateDialog().ShowAsync();
                }
            }
            catch
            {
                // Ignore
            }

            try
            {
                var engagementManager = StoreServicesEngagementManager.GetDefault();
                await engagementManager.RegisterNotificationChannelAsync();
            }
            catch
            {
                // Ignore
            }

            try
            {
                // Install Cortana Voice Commands
                var vcdStorageFile = await Package.Current.InstalledLocation.GetFileAsync(@"SoundByteCommands.xml");

                await VoiceCommandDefinitionManager.InstallCommandDefinitionsFromStorageFileAsync(vcdStorageFile);
            }
            catch
            {
                // Ignore
            }

            try
            {
                // Register the background task
                if (!BackgroundTaskHelper.IsBackgroundTaskRegistered("NotificationTask"))
                {
                    BackgroundTaskHelper.Register("NotificationTask", "SoundByte.Notifications.NotificationTask",
                                                  new TimeTrigger(15, false));
                }
            }
            catch
            {
                // Ignore
            }
        }