【问题标题】:AltBeacon: easy way to select a beacon EddystoneAltBeacon:选择信标 Eddystone 的简单方法
【发布时间】:2016-07-31 12:27:36
【问题描述】:

这是为类型选择信标 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...
    }

【问题讨论】:

  • serviceUUID 将为您提供所有信标用户专业

标签: ibeacon altbeacon beacon eddystone


【解决方案1】:

是的!使用Android Beacon Library 2.8+ 版本,这要容易得多。每个BeaconParser 都添加了一个可选的字符串标识符。此标识符将传递给使用该解析器匹配的任何Beacon 实例,因此您可以轻松判断哪个信标类型是。

这是一个如何工作的示例:

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

...

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

请务必在构造 BeaconParser 时设置标识符。

这正是由于确定您的问题中指出的信标类型的尴尬而添加的。

【讨论】:

    【解决方案2】:

    检查 altbeacon 库:http://altbeacon.org

    要区分信标,请以这种方式使用 if 语句:

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

    一旦信标在范围内,代码就会在 UI 线程中运行:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多