Beispiel #1
0
        async void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            var promise = await BackgroundExecutionManager.RequestAccessAsync();

            if (promise == BackgroundAccessStatus.Denied)
            {
                MessageDialog warningDialog = new MessageDialog("Background execution is disabled. Please re-enable in the Battery Saver app to allow this app to function", "Background GPS");
                await warningDialog.ShowAsync();
            }
            else
            {
                var defaultSensor = Windows.Devices.Sensors.Accelerometer.GetDefault();
                if (defaultSensor != null)
                {
                    var deviceUseTrigger = new DeviceUseTrigger();

                    deviceUseTask = RegisterBackgroundTask("BackgroundGps.Engine.BackgroundGpsTask", "GpsTask", deviceUseTrigger, null);

                    try
                    {
                        DeviceTriggerResult r = await deviceUseTrigger.RequestAsync(defaultSensor.DeviceId);

                        System.Diagnostics.Debug.WriteLine(r); //Allowed
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine(ex);
                    }
                }
            }
        }
        public static async void RegisterAndRunAsync(DeviceInformation devInfo)
        {
            var taskName = typeof(CheckHeartRateInBackgroundTask).ToString();

            IBackgroundTaskRegistration checkHeartRateInBackground = BackgroundTaskRegistration.AllTasks.Values.FirstOrDefault(t => t.Name == taskName);

            if (band.IsConnected() && band.Identity.IsAuthenticated())
            {
                if (checkHeartRateInBackground != null)
                {
                    // if the task is already executing, unregister it
                    checkHeartRateInBackground.Unregister(true);
                }

                var devTrigger  = new DeviceUseTrigger();
                var taskBuilder = new BackgroundTaskBuilder {
                    Name               = taskName,
                    TaskEntryPoint     = typeof(CheckHeartRateInBackgroundTask).ToString(),
                    IsNetworkRequested = false
                };

                taskBuilder.SetTrigger(devTrigger);

                BackgroundTaskRegistration task = taskBuilder.Register();
                task.Completed += Task_Completed;
                task.Progress  += Task_Progress;
                await devTrigger.RequestAsync(devInfo.Id);
            }
        }
Beispiel #3
0
        }//Constructor End

        /// <summary>
        /// Function to Request Background Access, Sets BackgroundRequestGranted to 'true' if granted
        /// Also checks if the accelerometer exists
        /// </summary>
        async void RequestBackgroundAccessAsync()
        {
            if (_acclerometer != null)
            {
                manualTrigger = new DeviceUseTrigger();

                BackgroundAccessStatus accessStatus = await BackgroundExecutionManager.RequestAccessAsync();

                if ((BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity == accessStatus) ||
                    (BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity == accessStatus))
                {
                    BackgroundRequestGranted = true;
                    return;
                }
                else
                {
#warning shift to UI

                    Error = "Background tasks may be disabled for this app";
                    return;
                }
            }
            else
            {
#warning shift to UI

                Error = "Accelerometer unavailable";
                return;
            }
        }//RequestBackgroundAccess end
Beispiel #4
0
        /// <summary>
        /// Register a background task with the specified taskEntryPoint, name, trigger,
        /// and condition (optional).
        /// </summary>
        /// <param name="taskEntryPoint">Task entry point for the background task.</param>
        /// <param name="name">A name for the background task.</param>
        /// <param name="trigger">The trigger for the background task.</param>
        /// <param name="condition">An optional conditional event that must be true for the task to fire.</param>
        public static BackgroundTaskRegistration RegisterBackgroundTask(String taskEntryPoint, String name)
        {
            BackgroundTaskRegistration task = null;

            try
            {
                var builder = new BackgroundTaskBuilder();

                builder.Name           = name;
                builder.TaskEntryPoint = taskEntryPoint;
                DeviceUseTrigger de = new DeviceUseTrigger();
                // de.RequestAsync();
                //    builder.SetTrigger(new TimeTrigger(15, true));
                task = builder.Register();
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine("Exception while registering background task: " + e.Message);
            }
            UpdateBackgroundTaskStatus(name, true);

            //
            // Remove previous completion status from local settings.
            //
            var settings = ApplicationData.Current.LocalSettings;

            settings.Values.Remove(name);

            return(task);
        }
        /// <summary>
        /// Register a background task with the specified taskEntryPoint, name, trigger,
        /// and condition (optional).
        /// </summary>
        /// <param name="taskEntryPoint">Task entry point for the background task.</param>
        /// <param name="name">A name for the background task.</param>
        /// <param name="trigger">The trigger for the background task.</param>
        /// <param name="condition">An optional conditional event that must be true for the task to fire.</param>
        public static BackgroundTaskRegistration RegisterBackgroundTask(String taskEntryPoint, String name)
        {
            BackgroundTaskRegistration task = null;
            try
            {
                var builder = new BackgroundTaskBuilder();

                builder.Name = name;
                builder.TaskEntryPoint = taskEntryPoint;
                DeviceUseTrigger de = new DeviceUseTrigger();
               // de.RequestAsync();
            //    builder.SetTrigger(new TimeTrigger(15, true));
                task = builder.Register();
            }
            catch(Exception e)
            {
                System.Diagnostics.Debug.WriteLine("Exception while registering background task: " + e.Message);
            }
            UpdateBackgroundTaskStatus(name, true);

            //
            // Remove previous completion status from local settings.
            //
            var settings = ApplicationData.Current.LocalSettings;
            settings.Values.Remove(name);

            return task;
        }
Beispiel #6
0
        public static async void RegisterAndRunAsync()
        {
            var taskName = typeof(CheckHeartRateInBackgroundTask).Name;
            IBackgroundTaskRegistration checkHeartRateInBackground = BackgroundTaskRegistration.AllTasks.Values.FirstOrDefault(t => t.Name == taskName);

            if (band.IsConnected() && band.Identity.IsAuthenticated())
            {
                if (checkHeartRateInBackground != null)
                {
                    checkHeartRateInBackground.Unregister(true);
                }

                var deviceTrigger = new DeviceUseTrigger();
                var deviceInfo    = await band.Identity.GetPairedBand();

                var taskBuilder = new BackgroundTaskBuilder
                {
                    Name               = taskName,
                    TaskEntryPoint     = typeof(CheckHeartRateInBackgroundTask).ToString(),
                    IsNetworkRequested = false
                };

                taskBuilder.SetTrigger(deviceTrigger);
                BackgroundTaskRegistration task = taskBuilder.Register();

                await deviceTrigger.RequestAsync(deviceInfo.Id);
            }
        }
        private static async Task BuildBandDataTask(string taskName, string deviceId)
        {
            var taskBuilder = new BackgroundTaskBuilder {
                Name = BandDataTaskId, TaskEntryPoint = taskName
            };

            DeviceUseTrigger = new DeviceUseTrigger();

            taskBuilder.SetTrigger(DeviceUseTrigger);

            taskBuilder.Register();

            var triggerResult = await DeviceUseTrigger.RequestAsync(deviceId);

            switch (triggerResult)
            {
            case DeviceTriggerResult.Allowed:
                return;

            case DeviceTriggerResult.DeniedByUser:
                throw new InvalidOperationException("Cannot start the background task. Access denied by user.");

            case DeviceTriggerResult.DeniedBySystem:
                throw new InvalidOperationException("Cannot start the background task. Access denied by system.");

            case DeviceTriggerResult.LowBattery:
                throw new InvalidOperationException("Cannot start the background task. Low battery.");
            }
        }
        async void MainPage_Loaded(object sender, RoutedEventArgs e)
        {

            var promise = await BackgroundExecutionManager.RequestAccessAsync();

            if (promise == BackgroundAccessStatus.Denied)
            {
                MessageDialog warningDialog = new MessageDialog("Background execution is disabled. Please re-enable in the Battery Saver app to allow this app to function", "Background GPS");
                await warningDialog.ShowAsync();
            }
            else
            {
                var defaultSensor = Windows.Devices.Sensors.Accelerometer.GetDefault();
                if (defaultSensor != null)
                {
                    var deviceUseTrigger = new DeviceUseTrigger();

                    deviceUseTask = RegisterBackgroundTask("BackgroundGps.Engine.BackgroundGpsTask", "GpsTask", deviceUseTrigger, null);

                    try
                    {
                        DeviceTriggerResult r = await deviceUseTrigger.RequestAsync(defaultSensor.DeviceId);

                        System.Diagnostics.Debug.WriteLine(r); //Allowed 
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine(ex);
                    }
                }
            }
        }
Beispiel #9
0
 private void Open_Button_Click(object sender, RoutedEventArgs e)
 {
     alti = Altimeter.GetDefault();
     if (null != alti)
     {
         _deviceUseTrigger = new DeviceUseTrigger();
     }
     openBackgroup();
 }
Beispiel #10
0
        public SyncDevice()
        {
            isSyncing = false;

            // Save trigger so that we may start the background task later
            // Only one instance of the trigger can exist at a time. Since the trigger does not implement
            // IDisposable, it may still be in memory when a new trigger is created.
            syncBackgroundTaskTrigger = new DeviceUseTrigger();

            this.InitializeComponent();
        }
        public SyncDevice()
        {
            isSyncing = false;

            // Save trigger so that we may start the background task later
            // Only one instance of the trigger can exist at a time. Since the trigger does not implement
            // IDisposable, it may still be in memory when a new trigger is created.
            syncBackgroundTaskTrigger = new DeviceUseTrigger();

            this.InitializeComponent();
        }
        private async Task ActivateBackground()
        {
            _deviceUseTrigger = new DeviceUseTrigger();
            accessStatus      = await BackgroundExecutionManager.RequestAccessAsync();

            if ((BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity == accessStatus) ||
                (BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity == accessStatus))
            {
                var backgroundTaskBuilder = new BackgroundTaskBuilder()
                {
                    Name           = "BandTaskInBackground",
                    TaskEntryPoint = "BandBackgroundTask.BandTaskInBackground"
                };
                backgroundTaskBuilder.SetTrigger(_deviceUseTrigger);
                _deviceUseBackgroundTaskRegistration           = backgroundTaskBuilder.Register();
                _deviceUseBackgroundTaskRegistration.Progress += _deviceUseBackgroundTaskRegistration_Progress;
                var triggerResult = await _deviceUseTrigger.RequestAsync(device.Id);
            }
        }
Beispiel #13
0
        public Home()
        {
            uriSelection = App.uriItemsAvailable;
            this.InitializeComponent();


            Accelerometer = Accelerometer.GetDefault();
            if (null != Accelerometer)
            {
                // Save trigger so that we may start the background task later.
                // Only one instance of the trigger can exist at a time. Since the trigger does not implement
                // IDisposable, it may still be in memory when a new trigger is created.
                _deviceUseTrigger = new DeviceUseTrigger();
            }
            else
            {
                this.NotifyUser("No accelerometer found", NotifyType.StatusMessage);
            }

            this.Loaded += Home_Loaded;

        }
        public Scenario1()
        {
            this.InitializeComponent();

            _accelerometer = Accelerometer.GetDefault();
            if (null != _accelerometer)
            {
                // Save trigger so that we may start the background task later.
                // Only one instance of the trigger can exist at a time. Since the trigger does not implement
                // IDisposable, it may still be in memory when a new trigger is created.
                _deviceUseTrigger = new DeviceUseTrigger();

                // Setup a timer to periodically refresh results when the app is visible.
                _refreshTimer = new DispatcherTimer()
                {
                    Interval = new TimeSpan(0, 0, 1) // Refresh once every second
                };
                _refreshTimer.Tick += RefreshTimer_Tick;
            }
            else
            {
                rootPage.NotifyUser("No accelerometer found", NotifyType.StatusMessage);
            }
        }
        public Scenario1_DeviceUse()
        {
            this.InitializeComponent();

            Accelerometer = Accelerometer.GetDefault();
            if (null != Accelerometer)
            {
                // Save trigger so that we may start the background task later.
                // Only one instance of the trigger can exist at a time. Since the trigger does not implement
                // IDisposable, it may still be in memory when a new trigger is created.
                _deviceUseTrigger = new DeviceUseTrigger();

                // Setup a timer to periodically refresh results when the app is visible.
                _refreshTimer = new DispatcherTimer()
                {
                    Interval = new TimeSpan(0, 0, 1) // Refresh once every second
                };
                _refreshTimer.Tick += RefreshTimer_Tick;
            }
            else
            {
                rootPage.NotifyUser("No accelerometer found", NotifyType.StatusMessage);
            }
        }
        private static async Task BuildBandDataTask(string taskName, string deviceId)
        {
            var taskBuilder = new BackgroundTaskBuilder { Name = BandDataTaskId, TaskEntryPoint = taskName };

            DeviceUseTrigger = new DeviceUseTrigger();

            taskBuilder.SetTrigger(DeviceUseTrigger);

            taskBuilder.Register();

            var triggerResult = await DeviceUseTrigger.RequestAsync(deviceId);

            switch (triggerResult)
            {
                case DeviceTriggerResult.Allowed:
                    return;
                case DeviceTriggerResult.DeniedByUser:
                    throw new InvalidOperationException("Cannot start the background task. Access denied by user.");
                case DeviceTriggerResult.DeniedBySystem:
                    throw new InvalidOperationException("Cannot start the background task. Access denied by system.");
                case DeviceTriggerResult.LowBattery:
                    throw new InvalidOperationException("Cannot start the background task. Low battery.");
            }
        }
        private static async Task<bool> RegisterAccelerometerTaskAsync(string deviceId, string taskName, string arguments)
        {
            String taskEntryPoint = "BackgroundTask.TaskAction";
            DeviceUseTrigger trigger = new DeviceUseTrigger();

            if (!isBackgroundTaskRegistered(taskName))
            {
                var builder = new BackgroundTaskBuilder();
                builder.Name = taskName;
                builder.TaskEntryPoint = taskEntryPoint;
                builder.SetTrigger(trigger);

                BackgroundTaskRegistration backgroundTaskregistration = builder.Register();

                if (!await RequestDeviceUseTriggerAsync(deviceId, trigger, taskName, arguments))
                {
                    DeregisterBackgroundTask(taskName);
                    return false;
                }
            }
            return true;
        }
 private static async Task<bool> RequestDeviceUseTriggerAsync(string deviceId, DeviceUseTrigger deviceUseTrigger, string taskName, string arguments)
 {
     try
     {
         DeviceTriggerResult deviceTriggerResult = await deviceUseTrigger.RequestAsync(deviceId, arguments);
         switch (deviceTriggerResult)
         {
             case DeviceTriggerResult.Allowed:
                 //ShowNotifyMessage("Background Task wurde gestartet.", NotifyLevel.Info);
                 return true;
             case DeviceTriggerResult.DeniedBySystem:
                 //ShowNotifyMessage("Background Task wurde vom System verweigert.", NotifyLevel.Warn);
                 break;
             case DeviceTriggerResult.DeniedByUser:
                 //ShowNotifyMessage("Background Task wurde vom Nutzer verweigert.", NotifyLevel.Warn);
                 break;
             case DeviceTriggerResult.LowBattery:
                 //ShowNotifyMessage("Background Task wurde wegen geringer Batterie verweigert.", NotifyLevel.Warn);
                 break;
         }
     }
     catch (InvalidOperationException)
     {
         DeregisterBackgroundTask(taskName);
     }
     return false;
 }
Beispiel #19
0
        public async Task StartBackgroundTask(Initiator InitiatedBy)
        {
            /* PebbleConnector _pc = PebbleConnector.GetInstance();
             * int Handler = await _pc.Connect(-1);
             *
             * return;*/
            var result = await BackgroundExecutionManager.RequestAccessAsync();

            if (result == BackgroundAccessStatus.Denied)
            {
                return;
            }

            PebbleConnector.SetBackgroundTaskRunningStatus(InitiatedBy);

            if (!await IsBackgroundTaskRunning())
            {
                backgroundSyncTaskRegistration = FindSyncTask();
                while (backgroundSyncTaskRegistration != null)
                {
                    backgroundSyncTaskRegistration.Unregister(true);

                    backgroundSyncTaskRegistration = FindSyncTask();
                }

                //if (backgroundSyncTaskRegistration == null)
                // {
                syncBackgroundTaskTrigger = new DeviceUseTrigger();

                // Create background task to write
                var backgroundTaskBuilder = new BackgroundTaskBuilder();

                backgroundTaskBuilder.Name           = Constants.BackgroundCommunicationTaskName;
                backgroundTaskBuilder.TaskEntryPoint = Constants.BackgroundCommunicationTaskEntry;
                backgroundTaskBuilder.SetTrigger(syncBackgroundTaskTrigger);
                backgroundSyncTaskRegistration = backgroundTaskBuilder.Register();


                // }


                try
                {
                    PebbleDevice _AssociatedDevice = PebbleDevice.LoadAssociatedDevice();
                    if (_AssociatedDevice != null)
                    {
                        var _device = await BluetoothDevice.FromIdAsync(_AssociatedDevice.ServiceId);

                        //var device = (await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.FromUuid(new Guid(Constants.PebbleGuid))))).FirstOrDefault(y => y.Name.ToLower().Contains("pebble"));

                        if (_device == null)
                        {
                            throw new OperationCanceledException("Is bluetooth enabled and the Pebble Time paired?");
                        }

                        //DeviceTriggerResult x = await syncBackgroundTaskTrigger.RequestAsync(device.Id);

                        var abc = syncBackgroundTaskTrigger.RequestAsync(_device.DeviceId).AsTask();
                        var x   = await abc;

                        System.Diagnostics.Debug.WriteLine("DeviceTriggerResult: " + x.ToString());

                        if (x != DeviceTriggerResult.Allowed)
                        {
                            throw new Exception(x.ToString());
                        }
                    }
                }
                catch (Exception exc)
                {
                    if (exc.GetType() == typeof(System.OperationCanceledException))
                    {
                        throw exc;
                    }
                    if (exc.GetType() != typeof(System.InvalidOperationException))
                    {
                        throw new Exception("Background communication task can't be started: " + exc.Message);
                    }
                    throw new Exception("Unexpected error: " + exc.Message);
                }
            }
        }