public void StopTask(BgTasks task) { Type listenerType; switch (task) { case BgTasks.Notifications: listenerType = typeof(NotificationCheckBroadcastReceiver); break; case BgTasks.Tiles: return; case BgTasks.ToastActivation: return; default: throw new ArgumentOutOfRangeException(nameof(task), task, null); } var am = (AlarmManager)MainActivity.CurrentContext.GetSystemService(Context.AlarmService); var intent = new Intent(MainActivity.CurrentContext, listenerType); var broadcast = PendingIntent.GetBroadcast(MainActivity.CurrentContext, 0, intent, PendingIntentFlags.CancelCurrent); if (broadcast != null) { am.Cancel(broadcast); } }
public static async void StartNotificationTask(BgTasks targetTask,bool restart = true) { string taskName, taskEntryPoint; int refreshTime; if (targetTask == BgTasks.Notifications) { if (!Settings.EnableNotifications || !Credentials.Authenticated || Settings.SelectedApiType == ApiType.Hummingbird) return; refreshTime = Settings.NotificationsRefreshTime; taskName = NotificationsTaskName; taskEntryPoint = NotificationsTaskNamespace; } else { refreshTime = 720; //half a day taskName = TilesTaskName; taskEntryPoint = TilesTaskNamespace; } var taskRegistered = TaskRegistration.ContainsKey(targetTask); if (!taskRegistered) taskRegistered = TryFindTask(targetTask); if (taskRegistered && !restart) return; try { if (taskRegistered) TaskRegistration[targetTask].Unregister(true); var access = await BackgroundExecutionManager.RequestAccessAsync(); if (access == BackgroundAccessStatus.DeniedBySystemPolicy || access == BackgroundAccessStatus.DeniedByUser) return; var builder = new BackgroundTaskBuilder { Name = taskName, TaskEntryPoint = taskEntryPoint }; builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable)); builder.SetTrigger(new TimeTrigger((uint)refreshTime, false)); if (TaskRegistration.ContainsKey(targetTask)) TaskRegistration[targetTask] = builder.Register(); else TaskRegistration.Add(targetTask, builder.Register()); } catch (Exception) { //unable to register this task } }
public void CallTask(BgTasks task) { try { new NotificationCheckBroadcastReceiver().OnReceive(MainActivity.CurrentContext, null); } catch (Exception) { //something went wrong } }
public static void StopTask(BgTasks task) { if (!TaskRegistration.ContainsKey(task)) { if (!TryFindTask(task)) { return; } } TaskRegistration[task].Unregister(false); TaskRegistration.Remove(task); }
private void NotificationTaskManagerOnOnNotificationTaskRequested(BgTasks task) { try { if (task == BgTasks.Notifications) { new NotificationsBackgroundTask().Run(null); } } catch (Exception e) { } }
private static bool TryFindTask(BgTasks targetTask) { var taskName = targetTask == BgTasks.Notifications ? NotificationsTaskName : TilesTaskName; foreach (var task in BackgroundTaskRegistration.AllTasks) { if (task.Value.Name == taskName) { TaskRegistration.Add(targetTask, task.Value as BackgroundTaskRegistration); return true; } } return false; }
private static bool TryFindTask(BgTasks targetTask) { var taskName = targetTask == BgTasks.Notifications ? NotificationsTaskName : TilesTaskName; foreach (var task in BackgroundTaskRegistration.AllTasks) { if (task.Value.Name == taskName) { TaskRegistration.Add(targetTask, task.Value as BackgroundTaskRegistration); return(true); } } return(false); }
internal void StartTask(BgTasks task, Context context) { Type listenerType; TimeSpan refreshTime; switch (task) { case BgTasks.Notifications: if (!Settings.EnableNotifications || !Credentials.Authenticated || Settings.SelectedApiType == ApiType.Hummingbird) { return; } refreshTime = TimeSpan.FromMinutes(Settings.NotificationsRefreshTime); listenerType = typeof(NotificationCheckBroadcastReceiver); break; case BgTasks.Tiles: return; case BgTasks.ToastActivation: return; case BgTasks.AiredNotification: listenerType = typeof(AiredNotificationCheckReceiver); refreshTime = TimeSpan.FromHours(1); break; default: throw new ArgumentOutOfRangeException(nameof(task), task, null); } long now = SystemClock.CurrentThreadTimeMillis(); var am = (AlarmManager)context.GetSystemService(Context.AlarmService); var intent = new Intent(context, listenerType); var pi = PendingIntent.GetBroadcast(context, 0, intent, PendingIntentFlags.CancelCurrent); am.SetRepeating(AlarmType.RtcWakeup, now, (long)refreshTime.TotalMilliseconds, pi); }
public static void StopTask(BgTasks task) { if (!TaskRegistration.ContainsKey(task)) { if(!TryFindTask(task)) return; } TaskRegistration[task].Unregister(false); TaskRegistration.Remove(task); }
public static void CallBackgroundTask(BgTasks task) { OnNotificationTaskRequested?.Invoke(task); }
public void CallTask(BgTasks task) { //throw new NotImplementedException(); }
public void StartTask(BgTasks task) { }
public static async void StartNotificationTask(BgTasks targetTask, bool restart = true) { string taskName, taskEntryPoint; int refreshTime = 15; switch (targetTask) { case BgTasks.Notifications: if (!Settings.EnableNotifications || !Credentials.Authenticated || Settings.SelectedApiType == ApiType.Hummingbird) { return; } refreshTime = Settings.NotificationsRefreshTime; taskName = NotificationsTaskName; taskEntryPoint = NotificationsTaskNamespace; break; case BgTasks.Tiles: refreshTime = 720; //half a day taskName = TilesTaskName; taskEntryPoint = TilesTaskNamespace; break; case BgTasks.ToastActivation: taskName = ToastActivationTaskName; taskEntryPoint = ToastActivationTaskNamespace; break; default: throw new ArgumentOutOfRangeException(nameof(targetTask), targetTask, null); } var taskRegistered = TaskRegistration.ContainsKey(targetTask); if (!taskRegistered) { taskRegistered = TryFindTask(targetTask); } if (taskRegistered && !restart) { return; } try { if (taskRegistered) { TaskRegistration[targetTask].Unregister(true); } var access = await BackgroundExecutionManager.RequestAccessAsync(); if (access == BackgroundAccessStatus.DeniedBySystemPolicy || access == BackgroundAccessStatus.DeniedByUser) { return; } var builder = new BackgroundTaskBuilder { Name = taskName, TaskEntryPoint = taskEntryPoint }; if (targetTask == BgTasks.ToastActivation) { builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable)); builder.SetTrigger(new ToastNotificationActionTrigger()); } else { builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable)); builder.SetTrigger(new TimeTrigger((uint)refreshTime, false)); } if (TaskRegistration.ContainsKey(targetTask)) { TaskRegistration[targetTask] = builder.Register(); } else { TaskRegistration.Add(targetTask, builder.Register()); } } catch (Exception) { //unable to register this task } }
public void CallTask(BgTasks task) { NotificationTaskManager.CallBackgroundTask(task); }
public void StopTask(BgTasks task) { NotificationTaskManager.StopTask(task); }
public void StartTask(BgTasks task) { StartTask(task, MainActivity.CurrentContext); }
private void NotificationTaskManagerOnOnNotificationTaskRequested(BgTasks task) { if(task == BgTasks.Notifications) new NotificationsBackgroundTask().Run(null); }