I z powodzeniem zmodyfikował aplikację implementacji referencyjnej z Androidem Beacon Biblioteki stosując następujący układ nawigacyjny tak, że wykrywa urządzenie iBeacon że mam pod ręką:
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);
}
}
Będąc nowicjuszem w wewnętrznych pakietach BLE, nie jestem pewien, czy jest to właściwy układ do użycia. Biblioteka wspiera standard AltBeacon, a jej dokumentacja nie wspomina o tym, jak wykrywać urządzenia iBeacon.
- Czy ten kod wykryje wszystkie urządzenia iBeacon? tj. czy
m:
prefiks jest zbyt restrykcyjny, czy jest to właściwa sekwencja bajtów, która pasuje do specyfikacji iBeacon? - Podobnie, czy reszta układu dokładnie odpowiada specyfikacji iBeacon?
Odniesienie:
Odpowiedzi:
To zadziałało dla mnie: „m: 2-3 = 0215, i: 4-19, i: 20-21, i: 22-23, p: 24-24”
Myślę, że nie musisz dopasowywać części 4c00, ponieważ jest to identyfikator producenta, więc prawdopodobnie możesz to zostawić i zacząć od m: 2-3 = 0215 Wszystko inne wygląda dobrze i wydaje się, że działa.
źródło
m:2-3=0215
zmiana jest rzeczywiście konieczna.setBeaconLayout
?Możesz pobrać specyfikację iBeacon (kliknij „Pobierz grafikę i specyfikacje”).
W obecnej wersji ID firmy musi być
0x4C00
, a typ beacona musi być0x0215
. Wszystkie inne pola są wymagane i zgodnie z ustaleniami.Więc tak, masz dokładnie rację i wykryje wszystkie zgodne iBeacony.
OT: Określa również, że interwał reklamowy musi wynosić 100 ms, ale poważnie wątpię, aby wszystkie iBeacony się tego trzymały.
źródło