我試圖創建一個後臺任務,當系統檢測到由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數據包時的播音。據他們說,沒有。
關於這個答案,什麼是合適的過濾器?
謝謝,現在我只需要創建一個位掩碼爲這個服務的UUID。 – Sidewinder94