/// <summary> /// Creates secondary tile if it is not yet created or removes the tile if it already exists. /// </summary> /// <param name="sender">Sender object</param> /// <param name="e">Event arguments</param> private async void ApplicationBar_PinTile(object sender, RoutedEventArgs e) { bool removeTile = SecondaryTile.Exists(TILE_ID); if (removeTile) { await RemoveBackgroundTaskAsync("StepTriggered"); } else { ApiSupportedCapabilities caps = await SenseHelper.GetSupportedCapabilitiesAsync(); // Use StepCounterUpdate to trigger live tile update if it is supported. Otherwise we use time trigger if (caps.StepCounterTrigger) { var myTrigger = new DeviceManufacturerNotificationTrigger(SenseTrigger.StepCounterUpdate, false); await RegisterBackgroundTaskAsync(myTrigger, "StepTriggered", "BackgroundTasks.StepTriggerTask"); } else { BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync(); IBackgroundTrigger trigger = new TimeTrigger(15, false); await RegisterBackgroundTaskAsync(trigger, "StepTriggered", "BackgroundTasks.StepTriggerTask"); } } await CreateOrRemoveTileAsync(removeTile); }
/// <summary> /// Creates secondary tile if it is not yet created or removes the tile if it already exists. /// </summary> /// <param name="sender">Sender object</param> /// <param name="e">Event arguments</param> private async void ApplicationBar_PinTile(object sender, RoutedEventArgs e) { bool removeTile = SecondaryTile.Exists(TILE_ID); if (removeTile) { await RemoveBackgroundTaskAsync("StepTriggered"); } else { ApiSupportedCapabilities caps = await SenseHelper.GetSupportedCapabilitiesAsync(); // Use StepCounterUpdate to trigger live tile update if it is supported. Otherwise we use time trigger if (caps.StepCounterTrigger) { var myTrigger = new DeviceManufacturerNotificationTrigger(SenseTrigger.StepCounterUpdate, false); await RegisterBackgroundTaskAsync(myTrigger, "StepTriggered", "BackgroundTasks.StepTriggerTask"); } else { BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync(); IBackgroundTrigger trigger = new TimeTrigger(15, false); await RegisterBackgroundTaskAsync(trigger, "StepTriggered", "BackgroundTasks.StepTriggerTask"); } } await CreateOrRemoveTileAsync(removeTile); }
/// <summary> /// Activate or deactive the background task for notification handling /// </summary> /// <param name="Activate"></param> /// <returns>true if activated</returns> private async Task <bool> BackgroundTaskActivate(bool Activate) { try { BackgroundAccessStatus _status = await BackgroundExecutionManager.RequestAccessAsync(); if (_status == BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity) { var PebbleTimeTaskName = "Pebble Time Background Notifications"; //Remove the current registration foreach (var task in BackgroundTaskRegistration.AllTasks) { if (task.Value.Name == PebbleTimeTaskName) { task.Value.Unregister(true); } } if (!Activate) { System.Diagnostics.Debug.WriteLine(String.Format("BackgroundTask Notifications Status: Deactivated")); return(true); } String Result = AccessoryManager.RegisterAccessoryApp(); if (await GetAppsFromPhone()) { foreach (var item in Apps) { AccessoryManager.EnableNotificationsForApplication(item.ID); } var backgroundTaskBuilder = new BackgroundTaskBuilder(); backgroundTaskBuilder.Name = PebbleTimeTaskName; backgroundTaskBuilder.TaskEntryPoint = "BackgroundTasks.BackgroundNotifications"; DeviceManufacturerNotificationTrigger deviceManufacturerNotificationTrigger = new DeviceManufacturerNotificationTrigger(String.Concat("Microsoft.AccessoryManagement.Notification:", Result), false); backgroundTaskBuilder.SetTrigger(deviceManufacturerNotificationTrigger); BackgroundTaskRegistration backgroundTaskRegistration1 = backgroundTaskBuilder.Register(); /*WindowsRuntimeMarshal.AddEventHandler<BackgroundTaskCompletedEventHandler>(new Func<BackgroundTaskCompletedEventHandler, * EventRegistrationToken>(backgroundTaskRegistration1, BackgroundTaskRegistration.add_Completed), * new Action<EventRegistrationToken>(backgroundTaskRegistration1, * BackgroundTaskRegistration.remove_Completed), * new BackgroundTaskCompletedEventHandler(this.registration_Completed));*/ SetNotificationTypes(); // PhoneAppsList(); System.Diagnostics.Debug.WriteLine(String.Format("BackgroundTask Notifications Status: Activated")); return(true); } else { ExtendedEventArgs eaa = new ExtendedEventArgs(); eaa.Error = String.Format("Notifications access denied."); OnFatalError(eaa); _BackgroundTaskEnabled = false; NotifyPropertyChanged("BackgroundTaskEnabled"); NotifyPropertyChanged("NotificationAppsEnabled"); } } } catch (Exception e) { System.Diagnostics.Debug.WriteLine("BackgroundTask Notifications Exception: " + e.Message); ExtendedEventArgs eaa = new ExtendedEventArgs(); eaa.Error = String.Format("A fatal error occurred: {0}", e.Message); #if DEBUG eaa.Error = String.Format("A fatal error occurred. {1}:{0}", e.Message, e.Source); #endif OnFatalError(eaa); } return(false); }