2015-01-24 22 views
7

Używam przykładową aplikację AltBeacon na urządzeniu Android - aplikację próbki dostarczone przez altbeacon.org jest tutaj: https://github.com/AltBeacon/android-beacon-library-referenceJak wykrywać wiele beaconów za pomocą biblioteki Android Altbeacon?

Jednakże, aplikacja po uruchomieniu wykrywa i wyświetla tylko jedną latarnię. Mam około 5 beaconów w pobliżu mojego urządzenia z Androidem. Jak wykryć wszystkie sygnały nawigacyjne?

W RangingActivity.java zauważyłem tej metody, która jest wywoływana, gdy przychodzi światłem w oczach:

public void onBeaconServiceConnect() { 
    beaconManager.setRangeNotifier(new RangeNotifier() { 
    @Override 
    public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) { 
     if (beacons.size() > 0) { 
      EditText editText = (EditText) RangingActivity.this.findViewById(R.id.rangingText);      
        Beacon firstBeacon = beacons.iterator().next(); 
        logToDisplay("The first beacon " + firstBeacon.toString() + " is about " + firstBeacon.getDistance() + " meters away."); 
      } 
     } 
    } 

zmodyfikowałem iterator do odczytu z kolekcji w pętli while, co następuje:

 Beacon firstBeacon; 
    while(beacons.iterator().hasNext()){ 
       firstBeacon = beacons.iterator().next(); 
       logToDisplay("The first beacon " + firstBeacon.toString() + " is about " + firstBeacon.getDistance() + " meters away."); 
      } 

Jednak aplikacja ulega awarii z tą modyfikacją.

Moje pytania:

(1) W jaki sposób mogę wyświetlić wszystkie światła ostrzegawcze, które są w pobliżu mojego urządzenia z systemem Android?

(2) Jak mogę wykryć sygnały nawigacyjne wychodzące z regionu?

+0

Czy możesz dodać dane wyjściowe logcat po awarii na Twoje pytanie? – Joe

Odpowiedz

5

Dla 1. Myślę, że musisz użyć pętli For. Lubię to.

for (Beacon beacon : beacons) { 
    logToDisplay("The beacon " + beacon.toString() + " is about " + beacon.getDistance() + " meters away."); 
} 

Dla 2. Miałem problemy z wykryciem tego, ale może to być długi czas oczekiwania. Bądź więc bardzo cierpliwy. Myślę, że kod w działaniu monitorowania można zmienić, aby wyświetlał odpowiedni komunikat. Możesz też przejrzeć logcat z urządzenia. Prosty logToDisplay może być używany wewnątrz sekcji didExitRegion w BeaconReferenceApplication.

public void didExitRegion(Region region) { 
    if (monitoringActivity != null) { 
     monitoringActivity.logToDisplay("I no longer see a beacon in the "+region.getUniqueId()); 
    } 
} 
+1

Użycie pętli jest właściwą odpowiedzią. Aplikacja referencyjna pokazuje odległość do pierwszego sygnału identyfikacyjnego widocznego dla uproszczenia – davidgyoung