首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用android信标库检测Eddystone-TLM

用android信标库检测Eddystone-TLM
EN

Stack Overflow用户
提问于 2016-09-05 14:35:08
回答 1查看 1.1K关注 0票数 2

我将android信标库配置为检测Eddystone数据包

代码语言:javascript
复制
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);

在Android信标库中从未检测到信标。

代码语言:javascript
复制
@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) {
  }
}

测试:

  • 如果信标配置在Eddystone-TML中,我可以使用制造商应用程序检测信标遥测数据。
  • 如果信标配置在Eddystone-TML中,我无法用库检测信标。
  • 如果信标配置在Eddystone-UID中,我可以使用库和制造商应用程序正确地检测信标。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-05 15:33:02

有两件事需要检查,以确保您根本没有检测到:

  • 确保onBeaconServiceConnect()被呼叫。添加Log.d语句以确保。
  • 如果您正在安卓6+上进行测试,请确保您的应用程序获得了位置权限。有关更多信息,请参见这里

编辑:用于Eddystone-TLM,库在远程回调中不提供单独的信标实例。库整数将此帧类型视为对主信标帧(如AltBeacon或Eddystone-UID )的补充。因此,它只会提供来自Eddystone-TLM的信息,如果也检测到来自同一设备的另一个主信标帧。

它的工作方式是,当检测到像AltBeacon或Eddystone-UID这样的信标帧时,创建一个Beacon对象并将其传递给测距回调。当检测到来自与主信标帧相同的MAC地址的Eddystone-TLM帧时,遥测信息被附加到主信标帧的对象上。若要访问此信息,请调用:

代码语言:javascript
复制
// 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.");

}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39332876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档