android - 无法在 Eddystone-TLM 中添加 extraDataField
问题描述
我正在尝试为 TLM 添加额外数据,但它不起作用。该字段的大小在接收方为 0。我搜索了很多,但没有得到任何回应。请帮帮我。
byte[] urlBytes = new byte[0];
try {
urlBytes = UrlBeaconUrlCompressor.compress("http://www.google.com");
} catch (MalformedURLException e) {
e.printStackTrace();
}
Identifier encodedUrlIdentifier = Identifier.fromBytes(urlBytes, 0, urlBytes.length, false);
ArrayList<Identifier> identifiers = new ArrayList<Identifier>();
identifiers.add(encodedUrlIdentifier);
ArrayList<Long> arrayList = new ArrayList<>();
arrayList.add(Long.valueOf(et_temp.getText().toString()));
arrayList.add(Long.valueOf(et_Voltage.getText().toString()));
beacon = new Beacon.Builder()
.setIdentifiers(identifiers)
.setMultiFrameBeacon(true)
.setBeaconTypeCode(0x20)
.setManufacturer(0x20)
.setServiceUuid(0xfeaa).setTxPower(-65)
.setExtraDataFields(arrayList)
.build();
// i:4-13
//"x,s:0-1=feaa,m:2-2=20,d:3-3,d:4-5,d:6-7,d:8-11,d:12-15"
beaconParser.addExtraDataParser(new BeaconParser().setBeaconLayout(BeaconParser.EDDYSTONE_TLM_LAYOUT));
beaconParser.setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT);
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(this, beaconParser);
beaconTransmitter.setConnectable(true);
beaconTransmitter.startAdvertising(beacon);
解决方案
你不能那样做。Eddystone-TLM 是它自己的信标传输。额外数据字段的整个概念是库解析端的一个功能,用于使从相应的主信标对象访问遥测数据变得容易。它不适用于传输。
我实际上不是 100% 确定该库支持传输 Eddystone-TLM,但您可以尝试通过独立于 Eddystone-URL 传输进行设置。
推荐阅读
- c# - 动态向表中添加行的错误
- python - 如何处理大型网页抓取项目中的多线程?
- asp.net-core - Razor 视图中的三元字符串比较不起作用
- php - Docker 无法连接到特定端口上的主机
- flutter - 如何在颤动中将滚动视图放在堆栈小部件中
- python - 如何通过回调函数将一个 Bokeh 小部件的输出用作另一个小部件的输入?
- sql - 如何循环一次删除一行
- excel - 如何将向量传递给Excel vba中的数组中的一行?
- css - 如何在不删除 Firefox/IE 上的轮廓焦点的情况下自定义输入边框
- angular - Angular 7 WebSocketSubject。订阅路径