我正在尝试创建一个后台任务,该任务将在系统检测到由estimote信标广播的eddystone广告时运行。
我已经配置了信标来发送eddystone数据包,我使用UniversalBeaconLibrary
来获取这些数据包,而应用程序在前台(这里没有问题)。
现在我想在应用程序未启动时收到通知(使用后台任务对蓝牙广播数据包作出反应)。据我了解,为了避免对电池/ CPU造成太大压力,我需要过滤这些广告。
最简单的过滤方式之一(我尝试使用的方法)是使用蓝牙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在使用eddystone数据包时他们使用的公司标识是什么。根据它们,没有。
关于这个答案,什么是合适的过滤器?
答案 0 :(得分:1)
Bluetooth SIG公司ID仅用于制造商蓝牙LE广告,如iBeacon和AltBeacon。 Eddystone使用服务蓝牙LE广告,其中不包含公司ID。相反,它们包含16位服务UUID 0xFEAA。
请点击此处了解详情:https://github.com/google/eddystone/blob/master/protocol-specification.md