2016-07-27 3 views
0

J'utilise Android Beacon Library pour faire une application de détecteur de balise. Je veux détecter les UID d'Eddystone qui commencent par 007B. J'utiliseIdentifier.parse (String, int) ne donne pas les résultats souhaités

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

Ceci ne détecte pas les balises qui commencent par 007b. Lorsque je connecte la région, cela donne id1: 123 id2: null id3: null Cette 123 est la valeur en octets de 7B.

J'ai essayé la fonction Identifier.parse avec l'espace de noms complet de 10 octets et cela fonctionnait. Ici, la région était id1: 0x007bxxxxxxxx id2: null id3: null

Quel peut être le problème?

Répondre

0

L'API ne fonctionne tout simplement pas comme ça. Il ne correspondra pas aux identificateurs partiels, seulement aux identificateurs entiers. Si vous créez une région avec le premier identificateur de 0x007b et essayez de faire correspondre une balise avec le premier identificateur de 0x007b0000000000000000, elle ne correspondra pas car 0x007b! = 0x007b0000000000000000.

Si vous vraiment voulez faire correspondre seulement les deux premiers octets du premier identifiant, vous pouvez définir un format balise personnalisée variante de Eddystone-UID qui définit le premier identifiant comme les deux premiers octets de l'espace de noms. Vous pouvez faire en sorte que les deux seconds identifiants soient l'espace de noms complet et les identifiants d'instance, respectivement. Comme ceci:

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

C'est un peu un hack, mais cela vous permettra de faire ce que vous voulez.