2016-09-05 1 views
2

configurer android beacon library pour détecter les paquets EddystoneDetect Eddystone-GGP bibliothèque de balise android

beaconManager = BeaconManager.getInstanceForApplication(context); 
    // Detect the main identifier (UID) frame: 
beaconManager.getBeaconParsers().add(new BeaconParser(). 
    setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19")); 
// Detect the telemetry (TLM) frame: 
beaconManager.getBeaconParsers().add(new BeaconParser(). 
    setBeaconLayout("x,s:0-1=feaa,m:2-2=20,d:3-3,d:4-5,d:6-7,d:8-11,d:12-15")); 
// Detect the URL frame: 
beaconManager.getBeaconParsers().add(new BeaconParser(). 
    setBeaconLayout("s:0-1=feaa,m:2-2=10,p:3-3:-41,i:4-21v")); 
beaconManager.bind(this); 

Beacon de ne jamais détecté dans la bibliothèque de balise Android.

@Override 
public void onBeaconServiceConnect() {  


beaconManager.addMonitorNotifier(this);  

beaconManager.addRangeNotifier(new RangeNotifier() { 
    @Override 
    public void didRangeBeaconsInRegion(Collection<Beacon> beacons, 
      Region region) { 


     if (beacons.size() > 0) { 
      Extra.log("Beacons detected", "info"); 
      //Process beacons data... 

     } 
    } 
}); 

    try { 

     beaconManager.startRangingBeaconsInRegion(new Region(
       "myRangingUniqueId", null, null, null)); 

    } catch (RemoteException e) { 
    } 
} 

Test:

  • Si balise est configuré dans Eddystone-TML je peux détecter les données de télémétrie de balise avec application du fabricant.
  • Si la balise est configurée dans Eddystone-TML, je ne peux pas détecter la balise avec la bibliothèque.
  • Si la balise est configurée dans Eddystone-UID, je peux détecter correctement la balise avec la bibliothèque et l'application du fabricant.

Répondre

3

Deux choses à vérifier pour vous assurer que vous ne détecte pas du tout:

  • Assurez-vous que onBeaconServiceConnect() est appelé. Ajouter une déclaration Log.d pour être sûr.
  • Assurez-vous que votre application a obtenu des autorisations de localisation si vous testez sur Android 6+. Voir here pour plus d'informations.

EDIT: Pour Eddystone-tlm, la bibliothèque ne fournit pas une instance de balise distincte dans la fonction de rappel allant. La bibliothèque intead traite ce type de trame comme supplémentaire à une trame de balise primaire comme AltBeacon ou Eddystone-UID. Il ne fournira donc les informations d'Eddystone-TLM que si une autre trame de balise primaire est également détectée provenant du même appareil. La façon dont cela fonctionne est que lorsqu'une trame de balise comme AltBeacon ou Eddystone-UID est détectée, un objet Beacon est créé et transmis au rappel de télémétrie. Lorsqu'une trame Eddystone-TLM est détectée provenant de la même adresse MAC que la trame d'une balise principale, les informations de télémétrie sont attachées à l'objet de la trame de balise principale. Pour accéder à cette information, vous appelez:

// Do we have telemetry data? 
if (beacon.getExtraDataFields().size() > 0) { 
    long telemetryVersion = beacon.getExtraDataFields().get(0); 
    long batteryMilliVolts = beacon.getExtraDataFields().get(1); 
    long pduCount = beacon.getExtraDataFields().get(3); 
    long uptime = beacon.getExtraDataFields().get(4); 

    Log.d(TAG, "The above beacon is sending telemetry version "+telemetryVersion+ 
       ", has been up for : "+uptime+" seconds"+ 
       ", has a battery level of "+batteryMilliVolts+" mV"+ 
       ", and has transmitted "+pduCount+" advertisements."); 

} 
+0

onBeaconServiceConnect() est appelée une fois au démarrage. didRangeBeaconsInRegion avec beacons.size() == 0 est appelé plusieurs fois même si la balise est désactivée. L'appareil est Android 5.1. – user3782779

+0

Je teste la bibliothèque dans le même appareil avec les balises Eddystone - UID et Albeacon et fonctionne bien. Le problème est seulement dans Eddystone - TLM balise. – user3782779

+0

Voir mon édition, expliquant comment accéder aux données TLM – davidgyoung