1

我試圖創建一個後臺任務,當系統檢測到由estimote beacon廣播的eddystone廣告時將運行該任務。BLE estimote eddystone後臺任務未運行

我已經配置了信標發送eddystone數據包,我用UniversalBeaconLibrary來獲取這些數據包,而應用程序在前臺(這裏沒有問題)。

現在我想在應用程序未啓動時使用通知(使用對藍牙廣播數據包作出反應的後臺任務)。據我的理解,爲了避免對電池/ CPU造成太大的壓力,我確實需要過濾這些廣告。

最簡單的過濾形式之一(我嘗試使用的一種)是使用Bluetooth SIG給出的公司ID。

這裏是我的嘗試:

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); 
} 

由於這是我得到一個異常,說沒有足夠或太多的過濾。

當取消一個觸發塊的註釋時,我沒有任何例外,但任務似乎沒有啓動。

**編輯:**我問estimote什麼是公司Id他們是使用eddystone數據包時的播音。據他們說,沒有。

關於這個答案,什麼是合適的過濾器?

回答