0

我正在使用Eddystone-URL与Android Beacon库。我将压缩的URL放入Beacon的dataFiled中,但是当我收到信号时,dataFields为空为什么会发生这种情况?重视这里的发射机代码:使用Android Beacon库从虚拟Eddystone-URL信标接收URL

try { 
     byte[] buf = UrlBeaconUrlCompressor.compress("http://www.google.com"); 
     beacon = new Beacon.Builder() 
       .setId1("0000FEAA-0001-1000-8000-00805F9B34FB") 
       .setManufacturer(0xFEAA) 
       .setTxPower(-59) 
       .setDataFields(bytesToListOfLongs(buf)) 
       .build(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
    BeaconParser beaconParser = new BeaconParser() 
      .setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT); 
    beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser); 

我开始传送之前解码的数据域,我看得很清楚的URL,但我没有在其他智能手机领域这个事情接受。

回答

0

你根本不能在这种情况下使用数据字段。数据字段仅用于保存少量信息。

而是将您想要传输的数据放入ID1字段本身。在iBeacon和AltBeacon格式的情况下,该Id是16个字节长。您需要将日期字节转换为总是16字节,并将它们格式化为uuid,以便标识符分析方法可以将它们转换为标识符。

+0

好的,但是那么Eddystone-URL格式为我提供了什么? –

+0

如果您在信标传输中对数据进行编码,那么您实际上已经超出了旨在传输简单唯一标识符的蓝牙信标的预期用途。欢迎您这样做,但是因为您超出了预期的使用范围,所以使用哪种格式确实无关紧要。如果您使用Eddystone-URL,则可以将URL中的数据进行编码。如果您使用Eddystone-UID,则将其编码到名称空间和实例标识符中。如果使用iBeacon或AltBeacon,则将其编码到UUID,主要和次要标识符中。 – davidgyoung