Sto utilizzando il codice di esempio in questa pagina (http://altbeacon.github.io/android-beacon-library/samples.html) nell'Avvio di un'app nella sezione Sfondo e ho un'app funzionante.Come ottenere i beacon visibili dalla RegioneBootstrap Metodo AltBeacon
Rileva ogni volta che un raggio è nel raggio di azione anche sullo sfondo.
Il problema è che ho bisogno di sapere quale beacon è (UUID, Major, Minor) per poi abbinarlo al mio database locale e lanciare una notifica con l'app ancora sullo sfondo.
La didEnterRegion (regione Regione) la funzione ha solo un metodo matchesBeacon, e ho provato a fare quanto segue per identificare quale dei fari viene visto ma sta gettando un NullPointerException:
public class SightSeeing extends Activity implements BootstrapNotifier, RangeNotifier {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Region region = new Region("sightRegion", null, null, null);
regionBootstrap = new RegionBootstrap(this, region);
BeaconManager.getInstanceForApplication(this).getBeaconParsers().add(
new BeaconParser(). setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")
);
BeaconManager.getInstanceForApplication(this).setRangeNotifier(this);
}
@Override
public void didEnterRegion(Region region) {
regionBootstrap.disable();
BeaconManager.getInstanceForApplication(this).setRangeNotifier(this);
try {
BeaconManager.getInstanceForApplication(this).startRangingBeaconsInRegion(region);
}
catch (RemoteException e) {
Log.e(TAG, "Can't start ranging");
}
}
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
if (beacons.size() > 0) {
Iterator<Beacon> beaconIterator = beacons.iterator();
while (beaconIterator.hasNext()) {
Beacon beacon = beaconIterator.next();
//check if beacon exists in our DB and throw notification
}
}
}
mi manca qualcosa di ovvio o non è possibile con questa libreria?
EDIT:
Ho aggiornato il codice di esempio per dare voi ragazzi un'idea più ampia e ho provato l'attuazione del suggerimento di FOliveira senza alcun successo.
EDIT2:
codice aggiornato per riflettere il suggerimento del davidgyoung. Ancora senza fortuna. Ho un Log.d() proprio sulla prima riga della funzione didRangeBeaconsInRegion() e non viene chiamato.
Ho provato ad aggiungere BeaconManager.getInstanceForApplication (this) .setRangeNotifier (this); prima del blocco try/catch e il risultato è lo stesso.
Ho implementato il suggerimento errato o esiste un altro modo per farlo funzionare?
Sapete che è stato chiamato didEnterRegion? Prova ad aggiungere una linea di debug nella parte superiore. Ovviamente se non viene chiamato, non sarai in grado di iniziare con successo andando con questa configurazione. – davidgyoung
hai risolto questo problema? Sto affrontando lo stesso problema. –