2016-09-05 3 views
2

I android beacon library konfigurieren Pakete EddystoneDetect-TLM Eddystone mit Android Leuchtfeuer Bibliothek

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 zu erkennen, in nie in Android Leuchtfeuer Bibliothek nachgewiesen.

@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:

  • Wenn Leuchtfeuer in Eddystone-TML so konfiguriert ist, kann ich Leuchtfeuer Telemetriedaten mit Herstellern App erfassen.
  • Wenn Beacon in Eddystone-TML konfiguriert ist, kann ich Beacon mit Bibliothek nicht erkennen.
  • Wenn Beacon in Eddystone-UID konfiguriert ist, kann ich Beacon korrekt mit Bibliothek und Hersteller App erkennen.

Antwort

3

Zwei Dinge zu überprüfen, dass Sie überhaupt nicht machen Erkennung:

  • Vergewissern Sie sich onBeaconServiceConnect() aufgerufen wird. Fügen Sie eine Log.d Anweisung hinzu, um sicher zu sein.
  • Stellen Sie sicher, dass Ihre App Standortberechtigungen erhalten hat, wenn Sie mit Android 6+ testen. Weitere Informationen finden Sie unter here.

EDIT: Für Eddystone-TLM, wird die Bibliothek keine separate Beacon-Instanz im Bereich Rückruf bieten. Die Bibliothek interad behandelt diesen Rahmentyp als ergänzend zu einem primären Beacon-Frame wie AltBeacon oder Eddystone-UID. Es liefert also nur die Informationen von Eddystone-TLM, wenn auch ein anderer primärer Beacon-Frame vom selben Gerät erkannt wird.

Die Art und Weise, wie es funktioniert, ist, wenn ein Beacon-Frame wie AltBeacon oder Eddystone-UID erkannt wird, ein Beacon Objekt erstellt und an den Callback-Bereich übergeben. Wenn ein Eddystone-TLM-Rahmen erkannt wird, der von der gleichen MAC-Adresse kommt wie der primäre Beacon-Rahmen, wird die Telemetrieinformation an das Objekt des primären Beacon-Rahmens angehängt. Um auf diese Information zuzugreifen, rufen Sie an:

// 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() wird einmal beim Start aufgerufen. didRangeBeaconsInRegion mit beacons.size() == 0 wird oft aufgerufen, auch wenn Beacon ausgeschaltet ist. Gerät ist Android 5.1. – user3782779

+0

Ich teste Bibliothek im selben Gerät mit Eddystone - UID und Albeacon Beacons und funktioniert ok. Problem ist nur in Eddystone - TLM Beacon. – user3782779

+0

Siehe meine Bearbeitung, erklären, wie TLM-Daten zugreifen – davidgyoung

Verwandte Themen