Windows UWP: не запускается фоновая задача Bluetooth для одного процесса - PullRequest
0 голосов
/ 28 июня 2018

Я регистрирую Bluetooth LE как сгруппированную фоновую задачу, но я не уверен, почему фоновая задача даже не запускается. Похоже, что он зарегистрирован правильно, когда я проверяю «Get-AppBackgroundTask» в PowerShell. Вот как я регистрирую задачу:

Guid bleServiceGuid = new Guid("xxxxxx-xxxx-xxxx-xxx-xxxxxx");

private void RegisterGroupedBackgroundTask(){
  BluetoothLEAdvertisementWatcherTrigger bleTrigger = new 
  BluetoothLEAdvertisementWatcherTrigger(); bleTrigger.AdvertisementFilter.Advertisement.ServiceUuids.Add(bleServiceGuid);
        bleTrigger.SignalStrengthFilter.InRangeThresholdInDBm = -65;
        bleTrigger.SignalStrengthFilter.OutOfRangeThresholdInDBm = -75;
        bleTrigger.SignalStrengthFilter.OutOfRangeTimeout = TimeSpan.FromMilliseconds(2000);
        bleTrigger.SignalStrengthFilter.SamplingInterval = TimeSpan.FromSeconds(1);

var bluetoothLeTask = BackgroundTasksConfiguration.RegisterBackgroundTask(null,
                                                  BackgroundTasksConfiguration.GroupedBackgroundTaskName,
                                                  bleTrigger,
                                                  null,
                                                  group);
}

Проблема в том, что точка входа в фоновую задачу никогда не достигается:

  BackgroundTaskDeferral deferral = null;
  IBackgroundTaskInstance _taskInstance = null;

public void Run(IBackgroundTaskInstance taskInstance){

deferral = taskInstance.GetDeferral();
        _taskInstance = taskInstance;

var details = _taskInstance.TriggerDetails as Windows.Devices.Bluetooth.Background.BluetoothLEAdvertisementWatcherTriggerDetails; 
     if (details != null){

      //Get rssi values....
     }    
 }

Как мне запустить фоновую задачу Bluetooth, когда внешнее периферийное устройство размещает рекламу с указанием диапазона обслуживания?

1 Ответ

0 голосов
/ 28 июня 2018

Это работает ... по какой-то причине приложению не нравится, если я просто фильтрую по руководству рекламной службы. Мне пришлось отфильтровать данные производителя для срабатывания триггеров:

 bleTrigger = new BluetoothLEAdvertisementWatcherTrigger();
        bleTrigger.AdvertisementFilter.Advertisement.ManufacturerData.Add(new BluetoothLEManufacturerData()
        {
            CompanyId = 76 // Apple Bluetooth SIG 
        });
...