Я успешно модифицировал приложение эталонную реализацию в Android Beacon библиотеки , используя следующую схему радиомаяка , так что он обнаруживает устройство IBeacon , что у меня есть под рукой:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
beaconManager.bind(this);
}
}
Поскольку я новичок во внутреннем устройстве BLE-пакетов, я не уверен, что это правильный макет для использования. Библиотека поддерживает стандарт AltBeacon, и в ее документации не упоминается, как обнаруживать устройства iBeacon.
- Будет ли этот код обнаруживать все устройства iBeacon? т.е.
m:
префикс слишком ограничительный или это правильная последовательность байтов, которая соответствует спецификации iBeacon? - Точно так же остальная часть макета точно соответствует спецификации iBeacon?
Справка:
Ответы:
У меня это сработало: "m: 2-3 = 0215, i: 4-19, i: 20-21, i: 22-23, p: 24-24"
Я не думаю, что вам нужно сопоставлять часть 4c00, потому что это идентификатор производителя, поэтому вы, вероятно, можете оставить это и начать с m: 2-3 = 0215 Все остальное выглядит правильно и, похоже, работает.
источник
m:2-3=0215
изменение действительно необходимо.setBeaconLayout
?Вы можете загрузить спецификацию iBeacon (нажмите «Загрузить обложку и спецификации»).
В текущей версии должен быть идентификатор компании
0x4C00
и тип маяка0x0215
. Все остальные поля являются обязательными, как вы указали.Так что да, вы совершенно правы, и он обнаружит все совместимые iBeacon.
ОТ: Также указано, что рекламный интервал должен составлять 100 мс, но я серьезно сомневаюсь, что все iBeacon придерживаются этого правила.
источник