Я пытаюсь создать фоновое задание, которое будет выполняться, когда система обнаружит рекламу 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. И по их словам, их нет.
Что касается этого ответа, то какой будет подходящий фильтр?
Спасибо, теперь я просто создать Bitmask для этой службы UUID. – Sidewinder94