Ich verwende den Beispielcode auf dieser Seite (http://altbeacon.github.io/android-beacon-library/samples.html) im Abschnitt Starten einer App im Hintergrund und ich habe eine funktionierende App.So erhalten Sie Beacons von der RegionBootstrap AltBeacon-Methode
Es erkennt, wenn ein Beacon auch im Hintergrund in Reichweite ist.
Das Problem ist, ich muss wissen, welche Beacon ist es (UUID, Major, Minor), um es dann mit meiner lokalen Datenbank übereinstimmen und eine Benachrichtigung mit der App noch im Hintergrund zu werfen.
Die didEnterRegion (Region Region) Funktion hat nur eine matchesBeacon Methode, und ich habe versucht, die von den Baken Sie folgendermaßen vorgehen zu identifizieren gesehen wird, aber es wird eine Nullpointer werfen:
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
}
}
}
Bin ich fehlt etwas offensichtlich oder ist das nicht möglich mit dieser Bibliothek?
EDIT:
ich den Codebeispiel aktualisiert haben euch eine breitere Idee zu geben, und ich habe versucht, ohne Erfolg den Vorschlag FOliveira Umsetzung.
EDIT2:
Aktualisiert Code der davidgyoung Vorschlag zu reflektieren. Immer noch kein Glück. Ich habe ein Log.d() rechts in der ersten Zeile der Funktion didRangeBeaconsInRegion() und es wird nicht aufgerufen.
Ich habe versucht, BeaconManager.getInstanceForApplication (this) .setRangeNotifier (this); vor dem try/catch-Block und das Ergebnis ist das gleiche.
Habe ich den Vorschlag falsch umgesetzt oder gibt es einen anderen Weg, um das zu erreichen?
Wissen Sie, dass didEnterRegion aufgerufen wird? Versuchen Sie, oben eine Debug-Zeile hinzuzufügen. Offensichtlich, wenn es nicht aufgerufen wird, werden Sie nicht in der Lage sein, erfolgreich mit diesem Setup zu beginnen. – davidgyoung
haben Sie dieses Problem gelöst? Ich stehe vor dem gleichen Problem. –