Можно ли использовать CoreBluetooth вместо iBeacons для измерения расстояния в фоновом режиме?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

1
задан Mitch Wolfe 4 April 2019 в 23:51
поделиться

1 ответ

CoreBluteooth, как правило, является плохой заменой CoreLocation для обнаружения маяков по ряду причин:

  1. Вы не можете обнаружить передачи iBeacon вообще с Core Bluetooth. Apple явно запрещает вам это делать, исключая рекламные данные в API-интерфейсах CoreBluetooth, если рекламные данные соответствуют iBeacon.

  2. Возможность обнаружения других форматов маяков с CoreBluetooth в фоновом режиме плохая. Рекламные объявления производителя (например, AltBeacon) практически полностью блокируются в фоновом режиме (вы можете обнаружить только один пакет!). Объявления служб (например, Eddystone) обнаруживаются в фоновом режиме, но обратные вызовы очень медленны по сравнению с тем, что вы получаете с CoreLocation.

  3. Многие другие функции CoreLocation отсутствуют, такие как автоматический запуск приложения при обнаружении маяка и аппаратные фильтры для быстрого обнаружения фона, когда ваше приложение приостановлено.

На самом деле вы можете ранжировать маяки в фоновом режиме, используя CoreLocation, несколькими различными способами:

  1. В течение 10 секунд после каждого перехода в зону входа / выхода, как вы видели.
  2. В течение до 180 секунд после каждого перехода на вход / выход из региона, если вы запрашиваете дополнительное время выполнения фона.
  3. На неопределенный срок, если вы настроили свой Info.plist на использование фонового режима местоположения и регистрировались для периодических обновлений местоположения (например, обновления журнала / местоположения)

Опции 2 и 3 выше доступны с CoreLocation но не CoreBluetooth. Чтобы войти в AppStore с опцией 3, вы должны убедить рецензентов Apple, что ваше приложение обеспечивает законную функцию фонового отслеживания местоположения.

Наконец, вы можете сделать свой собственный расчет расстояния на основе свойства CLBeacon # rssi. Лучше усреднить его в течение 20-30 секунд, чтобы уменьшить шум, и вам каким-то образом понадобится ваше собственное эталонное значение для ожидаемого RSSI на расстоянии 1 метра, поскольку тот, который встроен в кадр маяка, не читается сторонним программным обеспечением. , Но вам может не понадобиться это делать. Если вы просто нацеливаетесь на iPad с помощью своего приложения, вы можете просто отрегулировать калибровочную константу внутри маяка с помощью ожидаемого расстояния в 1 метр RSSI для вашего iPad, и вы должны получить более точные измерения расстояния.

В некоторых случаях вы все еще хотите использовать CoreBluetooth, несмотря на недостатки, указанные выше. По этой причине я построил этот репо .

0
ответ дан davidgyoung 4 April 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: