我使用以下代码通过我的Android设备作为Eddystone进行传输;
try {
byte[] urlBytes = UrlBeaconUrlCompressor.compress("http://www.****.com");
Identifier encodedUrlIdentifier = Identifier.fromBytes(urlBytes, 0, urlBytes.length, false);
ArrayList<Identifier> identifiers = new ArrayList<Identifier>();
identifiers.add(encodedUrlIdentifier);
Beacon beacon = new Beacon.Builder()
.setBluetoothName("devicename")
.setIdentifiers(identifiers)
.setManufacturer(0x0118)
.setTxPower(-59)
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout(BeaconParser.EDDYSTONE_URL_LAYOUT);
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
beaconTransmitter.startAdvertising(beacon);
} catch (MalformedURLException e) {
Log.d("ww", "That URL cannot be parsed");
}
扫描设备时无法获取beacon.getBluetoothName()。是否可以添加名称。我使用.setBluetoothName(“ devicename”)进行添加,但扫描时未显示。返回null。
通常无法在信标广告中添加蓝牙名称,因为在BLE广告的有限数据包大小中根本没有足够的空间。
Beacon
上的字段对传输没有影响。仅在扫描信标时填充。扫描时,数据来自称为扫描响应的单独数据包。出于实用目的,它是只读的。
可以更改出现在手机自身的扫描响应中的手机的BLE名称。但是,更改此名称不仅会影响信标传输,还会影响电话上的所有蓝牙操作。这是库的BeaconTransmitter不更改此名称的另一个原因。您可以自己执行此操作,但是,可以通过在Android的BluetoothAdapter
类上调用setName方法。