2015-01-20 11 views
7

Zajmuję się tworzeniem aplikacji, w której używam sygnałów nawigacyjnych. Przeszedłem z podobnym pakietem SDK Estimote do tego samego. Teraz chodzi o to, że muszę znać Unikalny Id określonego Beacona. Załóżmy, że mam 3 Beacony i wszystkie są obecne w zasięgu urządzenia. Teraz chcę wykonywać różne funkcje w oparciu o Unikalny identyfikator sygnałów nawigacyjnych. W tym celu muszę znać Unikalny identyfikator każdego Beacona. Obecnie podaję UUID na sygnał nawigacyjny i sprawdzam, czy jest on w obszarze urządzenia, czy nie. Mój kod wygląda następująco: -Jak uzyskać unikalny identyfikator beacon za pomocą pakietu Estimote SDK w systemie Android

private static final String ESTIMOTE_PROXIMITY_UUID = "XYZ"; 
private static final Region ALL_ESTIMOTE_BEACONS = new Region("regionId",ESTIMOTE_PROXIMITY_UUID, null, null); 

beaconManager.setMonitoringListener(new MonitoringListener() { 

      @Override 
      public void onExitedRegion(Region region) { 
      //Region Exited 
      } 

      @Override 
      public void onEnteredRegion(Region arg0, List<Beacon> arg1) { 
       // TODO Auto-generated method stub 
       //Do something ... 
      } 
     }); 

Teraz trzeba uzyskać unikatowy identyfikator Beacon programowo tak, że mogę podjąć decyzję w zależności od identyfikatorów. Proszę, pomóż mi uporządkować to samo. Każda pomoc byłaby znacząca. Dzięki.

+0

I zostały stoi ten sam problem . Znalazłeś rozwiązanie? – Roadblock

Odpowiedz

6

Każdy sygnał nawigacyjny ma ID.
ID ma długość 20 bajtów i jest podzielona na trzy sekcje:

  • proximityUUID (16 bajtów)

  • major numer (2 bajty)

  • minor numer (2 bajty).

Jak z nich korzystać w celu zidentyfikowania konkretnego sygnału nawigacyjnego?

Po pierwsze, musisz wiedzieć, że wokół ciebie może być dużo sygnałów nawigacyjnych. Te sygnały nawigacyjne mogą pochodzić od innych dostawców, firm lub programistów, więc chcesz je odfiltrować.
Aby odfiltrować sygnały nawigacyjne, należy użyć proximityUUID do grupowania sygnałów nawigacyjnych dostarczonych przez Ciebie lub Twoją firmę. Podaj ten sam proximityUUID do wszystkich swoich sygnałów nawigacyjnych.
Po tym można rozpocząć monitorowanie i począwszy od:

private final Region MY_BEACONS = new Region("MY_BEACONS","YOUR_PROXIMITY_UUID", null, null); 

beaconManager.startMonitoring(MY_BEACONS); 
beaconManager.startRanging(MY_BEACONS); 

Teraz w swoich słuchaczy użytkownik zostanie powiadomiony, gdy sygnalizatory będzie w okolicy.

Załóżmy teraz, że piszesz aplikację dla kin w mieście. Każde kino ma dwa różne sygnały nawigacyjne, aby wykonywać różne akcje. Jak rozróżnić latarnie nawigacyjne w kinach i jak to zrobić w przypadku konkretnego radiolatarni w określonym kinie?
Użyj pól major i minor. Np

  • stosowania major dla identyfikacji wszystkich sygnałów nawigacyjnych w szczególności kina
  • zastosowanie minor identyfikacji konkretnego sygnału nawigacyjnego w danym kina.

Po utworzeniu identyfikatora dla radiolatarni w taki sposób, można uzyskać konkretne Beacon i wykonać działanie:

private final int SCARY_CINEMA_ID = 1111; 
private final int SCARY_CINEMA_BEACON_1 = 1; 
private final int SCARY_CINEMA_BEACON_2 = 2; 
private final int COMEDY_CINEMA_ID = 2222; 
private final int COMEDY_CINEMA_BEACON_1 = 1; 
private final int COMEDY_CINEMA_BEACON_2 = 2; 


@Override 
public void onEnteredRegion(Region region, List<Beacon> beacons) { 
    for(Beacon beacon : beacons){ 
     if(beacon.getMajor() == SCARY_CINEMA_ID){ 
      if(beacon.getMinor == SCARY_CINEMA_BEACON_1){ 
       //do something for this beacon 
      } else{ 
       //do something for second beacon in cinema 
      } 
     } else if(beacon.getMajor == COMEDY_CINEMA_ID){ 
      ... 
     } 
} 

Nadzieja, że ​​pomoże :)

+0

Witam mklimek, dziękuję za odpowiedź. Nie mam jasności co do sprawy Major & Minor, a także co to jest "SCARY_CINEMA_ID" i "SCARY_CINEMA_BEACON_1" tutaj. Czy możesz wyjaśnić nieco więcej. –

+1

@SalmanKhan 'major' i' minor' to standardowe pola dla znaczników esitmote. Możemy użyć ich jako identyfikatorów do identyfikacji sygnałów nawigacyjnych. SCARY_CINEMA_ID jest arbitralne wybrane 'minor' dla kina na przykład 1111. COMEDY_CINEMA_ID jest drugim' minor' dla innego kina na przykład 2222. Jeśli masz dwa beacony i chcesz powiązać je z SCARY_CINEMA i 'proximityUUID' =" beaconsForCinemas ", masz ustawić wartości dla pierwszego sygnału nawigacyjnego: uuuid = "beaconsForCinemas", major = 1111, minor = 1, dla drugiego sygnału nawigacyjnego w tym kinie użyj tego samego, ale ustaw mniejszy = 2 – mklimek

+0

@SalmanKhan http://estimote.com/api/getting -started/intro-beacons.html – mklimek

0

Przyszedłem do tego artykułu, gdy go wypróbowywałem, może to być dla ciebie pomocne. https://community.estimote.com/hc/en-us/articles/200868188-How-do-I-modify-UUID-major-and-minor-values-

+0

Hej Swarna, dziękuję za odpowiedź, ale szukam jej dla Androida. Jakikolwiek sposób rozwiązać ten problem w systemie Android? –

+0

prawdopodobnie powinieneś poprosić bezpośrednio o oszacowanie, większość funkcji nie jest jeszcze dostępna dla Androida. – Mal

+0

ok dzięki za pomoc. –

Powiązane problemy