2016-07-31 75 views
2

Dies ist die einzige Möglichkeit, ein Leuchtfeuer Eddystone für den Typ zu wählen?AltBeacon: einfache Möglichkeit, ein Leuchtfeuer auszuwählen Eddystone

 if (b.getServiceUuid() == 0xfeaa) { 
     if (b.getBeaconTypeCode() == 0x00) { 
      // Eddystone-UID 
     } else if (b.getBeaconTypeCode() == 0x10) { 
      // Eddystone-URL 
     } else if (b.getBeaconTypeCode() == 0x20) { 
      // Eddystone-TLM 
     } 
    } else { 
     // AltBeacon... 
    } 
+0

Die ServiceUUID würde Ihnen stattdessen alle Beacons user major geben –

Antwort

2

Ja! Mit Android Beacon Library Version 2.8 + ist dies viel einfacher. Zu jedem BeaconParser wurde eine optionale Zeichenfolge-ID hinzugefügt. Dieser Bezeichner wird an eine beliebige Beacon Instanz übergeben, die mit diesem Parser verglichen wird, sodass Sie leicht erkennen können, welcher Beacontyp ist.

Hier ist ein Beispiel dafür, wie das funktioniert:

beaconManager.getBeaconParsers().add(new BeaconParser("Eddystone-UID") 
    .setBeaconLayout(BeaconParser.EDDYSTONE_UID_LAYOUT)); 

... 

if (beacon.getParserIdentifier().equals("Eddystone-UID")) { 
    // This is Eddystone-UID 
} 

Nur sicher sein, die Kennung zu setzen, wenn Ihre BeaconParser zu konstruieren.

Dies wurde genau wegen der Ungeschicklichkeit der Bestimmung des Beacon-Typs hinzugefügt, auf den in Ihrer Frage hingewiesen wird.

0

Überprüfen Sie die altbeacon Bibliothek: http://altbeacon.org

Baken die if-Anweisung auf diese Weise verwenden zu unterscheiden:

if (String.valueOf(beac.getId2()).trim().equals("13191"))//Getting the major of the beacon 
          { 
           //do something 
          } 

-Code wich in dem UI-Thread ausgeführt wird, sobald die Beacons sind in Reichweite:

public void Run(View view){ 
     beaconManager.addRangeNotifier(new RangeNotifier() { 
      @Override 
      public void didRangeBeaconsInRegion(final Collection<Beacon> collection, Region region) { 

       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 

         for (Beacon beac : collection) { //LOOP searches for all the beacons within the range... 
          //beac.getId1()// 
          beaconUUID = beac.getId2().toString(); //Major 
          //beac.getId3()//Minor 
          udaljenost1 = Math.round(beac.getDistance() * 100.0)/100.0; //dobivanje integera iz decimala, zaokruzivanje na cjeli broj 

          if (String.valueOf(beac.getId2()).trim().equals("13191"))//Getting the major of the beacon 
          { 
           //do something 
          } 
         } 
        } 
       }); 


      } 
     }); 

    }