2016-07-27 29 views
0

Ich benutze Android Beacon Library, um eine Beacon Detector-Anwendung zu erstellen. Ich möchte Eddystone UIDs erkennen, die mit 007B beginnen. Ich verwendeIdentifier.parse (String, int) liefert keine gewünschten Ergebnisse

mRegionSuccess = new Region("BeaconsSuccess", Identifier.parse("0x007b", 2), null, null); 

Dies erkennt keine Beacons, die mit 007b beginnen. Wenn ich die Region logge, gibt es id1: 123 id2: null id3: null Diese 123 ist der Byte-Wert von 7B.

Ich versuchte Identifier.parse Funktion mit dem vollständigen 10-Byte-Namespace und es funktionierte. Hier war die Region id1: 0x007bxxxxxxxx id2: null id3: null

Was kann das Problem sein?

Antwort

0

Die API funktioniert einfach nicht so. Es stimmt nicht mit partiellen Bezeichnern überein, sondern mit ganzen Bezeichnern. Wenn Sie eine Region mit dem ersten Bezeichner 0x007b erstellen und versuchen, ein Beacon mit dem ersten Bezeichner 0x007b0000000000000000 abzugleichen, wird keine Übereinstimmung gefunden, da 0x007b! = 0x007b0000000000000000.

Wenn Sie wirklich nur die ersten beiden Bytes der ersten Kennung übereinstimmen soll, Sie eine benutzerdefinierte Beacon-Formatierungs Variante von Eddystone-UID definieren können, die die erste Kennung als die ersten beiden Bytes des Namensraum definiert. Sie können die zweiten beiden Bezeichner als die vollständigen Namespace- bzw. Instanzbezeichner festlegen. Wie folgt:

beaconManager.getBeaconParsers().add(new BeaconParser(). 
setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-5,i:4-13,i:14-19")); 

Es ist ein bisschen wie ein Hack, aber das wird Ihnen erlauben zu tun, was Sie wollen.