7

Sto usando il campione app AltBeacon sul mio dispositivo Android - l'applicazione di esempio fornito da altbeacon.org è qui: https://github.com/AltBeacon/android-beacon-library-referenceCome rilevare più beacon utilizzando la libreria Android di Altbeacon?

Tuttavia, l'applicazione una volta lanciato è il rilevamento e la visualizzazione di un solo faro. Ho circa 5 beacon vicino al mio dispositivo Android. Come posso rilevare tutti i beacon?

In RangingActivity.java, ho notato questo metodo che viene chiamato quando un faro viene a vista:

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."); 
      } 
     } 
    } 

ho modificato l'iteratore per leggere dalla raccolta in un ciclo while come segue:

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

Tuttavia, l'applicazione si arresta in modo anomalo con questa modifica.

Le mie domande:

(1) Come è possibile visualizzare tutti i fari che si trovano vicino al mio dispositivo Android?

(2) Come è possibile rilevare i beacon che si spostano fuori dalla regione?

+0

È possibile aggiungere l'output logcat quando si è arrestato in modo anomalo alla domanda? – Joe

risposta

5

Per 1. Penso che sia necessario utilizzare un ciclo For. Come questo.

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

Per 2. Ho riscontrato problemi, ma potrebbe essere un lungo timeout. Quindi sii molto paziente. Penso che il codice nell'attività di monitoraggio possa essere modificato per visualizzare un messaggio per quello. Oppure puoi rivedere il logcat da un dispositivo. Un semplice logToDisplay può essere utilizzato all'interno della sezione didExitRegion di BeaconReferenceApplication.

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

L'uso di un ciclo è la risposta giusta. L'app di riferimento mostra solo la distanza dal primo faro visibile per semplicità – davidgyoung

Problemi correlati