2015-06-13 41 views
5

Pierwszą rzeczą, którą chciałbym powiedzieć jest to, że po raz pierwszy używam sygnałów nawigacyjnych. Używam biblioteki AltBeaconBiblioteka AltBeacon Android Beacon otrzymująca główne, podrzędne i UUID

Obecnie mam kilka rzeczy działających, na przykład, kiedy wchodzę do regionu lub kiedy go opuszczam .. również prawidłowo zmierz odległość do latarni. To działa idealnie. Dostaję również UUID, główny i podrzędny .. ale nie wiem, czy robię to poprawnie.

To jest mój kod:

public class Hello extends Activity implements BeaconConsumer { 

    protected static final String TAG = "readme"; 
    private BeaconManager beaconManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.hola); 


     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); 

    } 

    @Override 
    public void onBeaconServiceConnect() { 

     try { 
      beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", Identifier.parse("MY_UUID"), Identifier.parse("1"), null)); 

     } catch (RemoteException e) { 
     } 

     beaconManager.setRangeNotifier(new RangeNotifier() { 
      @Override 
      public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 
       if (beacons.size() > 0) { 
        Log.i(TAG, "The first beacon I see is about " + beacons.iterator().next().getDistance() + " meters away."); 


        Log.i(TAG, "Reading…"+"\n"+"proximityUuid:"+" "+ beacons.iterator().next().getId1()+"\n"+ 
            "major:"+" "+beacons.iterator().next().getId2()+"\n"+ 
            "minor:"+" "+beacons.iterator().next().getId3());} 

      } 
     }); 


     beaconManager.setMonitorNotifier(new MonitorNotifier() { 

      @Override 
      public void didEnterRegion(Region region) { 
       Log.i(TAG, "I just saw an beacon for the first time!"); 
      } 

      @Override 
      public void didExitRegion(Region region) { 
       Log.i(TAG, "I no longer see an beacon"); 
      } 

      @Override 
      public void didDetermineStateForRegion(int state, Region region) { 
       Log.i(TAG, "I have just switched from seeing/not seeing beacons: " + state); 
      } 
     }); 

     try { 
      beaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null)); 

     } catch (RemoteException e) { 
     } 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     beaconManager.unbind(this); 
    } 
} 

Jak powiedziałem, mam UUID, większe i mniejsze, ale ja się za pomocą

beaconManager.setRangeNotifier (new RangeNotifier() {...

setRangeNotifier uzyskać dystans do radiolatarni , więc jest ona automatycznie aktualizowana co kilka sekund, z tego powodu za każdym razem, gdy jest aktualizowana ponownie, pobierz identyfikator UUID, główny i podrzędny.

Czy to właściwe miejsce na zdobycie numeru UUID, głównego i nieletniego? Starałem się go, gdy wchodzę region:

@Override 
      public void didEnterRegion(Region region) { 
       Log.i(TAG, "I just saw an beacon for the first time!"); 
      } 

... ale bez powodzenia.

Przeszukałem wiele informacji, ale nie mogę znaleźć niczego konkretnego. Moim zamiarem jest posiadanie zmiennej, która zawiera UUID, innej, która zawiera główną i drugą zawierającą nieletnią. Zgadza się?

Jeśli to nie jest właściwa droga, co to jest? Czy to prawda, tak jak teraz?

Bardzo doceniam każdą pomoc i umieszczam wzmiankę o @davidgyoung ... Mam nadzieję, że nie zawracam sobie głowy.

Pozdrowienia.

Odpowiedz

4

Tak, używanie identyfikatora beacon jest prawidłowym podejściem przy użyciu RangeNotifier.

Powodem, dla którego nie można uzyskać identyfikatorów w wywołaniu zwrotnym dla MonitorNotifier, jest to, że wywołanie zwrotne przekazuje tylko obiekt Regionu, którego region został wprowadzony/zakończony. Ten region może zawierać symbole wieloznaczne dla niektórych identyfikatorów, więc zwykle nie powie Ci wszystkiego o napotkanych sygnałach nawigacyjnych. W niektórych przypadkach nie jest to konieczne.

Najważniejsze jest to, że jeśli chcesz odczytywać wszystkie identyfikatory, robisz właściwe rzeczy, używając interfejsów API zakresu i RangeNotifier.

+0

Dziękuję bardzo :)) – Sergio76