1

Я пытаюсь создать фоновое задание, которое будет выполняться, когда система обнаружит рекламу eddystone, транслируемую маяком оценки.BLE оценка фоновая задача eddystone не работает

Я уже настроил маяк для отправки пакетов eddystone, и я использовал UniversalBeaconLibrary, чтобы получить эти пакеты, пока приложение находится на переднем плане (здесь нет проблем).

Теперь я хочу получить уведомление, когда приложение не запускается (используя фоновое задание, реагирующее на передаваемые bluetooth-пакеты). Насколько я понимаю, чтобы избежать чрезмерной нагрузки на аккумулятор/процессор, мне нужно отфильтровать эти рекламные объявления.

Одним из простейших способов фильтрации (тот, который я пытался использовать) является использование идентификатора компании, предоставленного Bluetooth SIG.

Вот что я пробовал:

public static async void Register() 
{ 
    if (BackgroundTaskRegistration.AllTasks.Count == 0) 
    { 
     var trigger = MakeTrigger(); 

     // this is needed for Phone, not so for Windows in this case. 
     var allowed = await BackgroundExecutionManager.RequestAccessAsync(); 

     if ((allowed != BackgroundAccessStatus.Denied) && 
      (allowed != BackgroundAccessStatus.Unspecified)) 
     { 
      BackgroundTaskBuilder builder = new BackgroundTaskBuilder 
      { 
       Name = "BLEWatcher", 
       TaskEntryPoint = typeof(BLEBackgroundConsumer.Consumer).FullName 
      }; 
      builder.SetTrigger(trigger); 
      builder.Register(); 
     } 
    } 
} 
private static BluetoothLEAdvertisementWatcherTrigger MakeTrigger() 
{ 
    var trigger = new BluetoothLEAdvertisementWatcherTrigger(); 
    //Can add some filters here 
    //trigger.AdvertisementFilter.Advertisement.ManufacturerData.Add(new BluetoothLEManufacturerData() 
    //{ 
    // CompanyId = 349 //Estimote 
    //}); 
    //trigger.AdvertisementFilter.Advertisement.ManufacturerData.Add(new BluetoothLEManufacturerData() 
    //{ 
    // CompanyId = 76 // Apple 
    //}); 
    //trigger.AdvertisementFilter.Advertisement.ManufacturerData.Add(new BluetoothLEManufacturerData() 
    //{ 
    // CompanyId = 224 // Google 
    //}); 
    return (trigger); 
} 

Как это я получаю исключение, сказав, что не достаточно или слишком много фильтрации.

При раскомментировании одного из триггерных блоков я не получил исключения, но задача, похоже, не запускается.

** EDIT: ** Я спросил, что такое идентификатор компании, который они использовали при использовании пакетов eddystone. И по их словам, их нет.

Что касается этого ответа, то какой будет подходящий фильтр?

ответ

1

Идентификатор компании Bluetooth SIG используется только с рекламой Bluetooth LE, например iBeacon и AltBeacon. Eddystone использует рекламные объявления Bluetooth LE, которые не содержат идентификатор компании. Вместо этого они содержат 16-разрядный UUID службы 0xFEAA.

Смотрите здесь для более подробной информации: https://github.com/google/eddystone/blob/master/protocol-specification.md

+0

Спасибо, теперь я просто создать Bitmask для этой службы UUID. – Sidewinder94