使用 Altbeacon 库传输带有名称的 Eddystone 信标

Transmit an Eddystone Beacon with name using Altbeacon Library

我使用以下代码使用我的 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()。可以加名字吗。我添加了 using .setBluetoothName("devicename") 但它在扫描时没有显示。它 return 无效。

通常不可能将蓝牙名称添加到信标广告中,因为在 BLE 广告的有限数据包大小中根本没有足够的空间。

Beacon 上的字段对传输没有影响。它仅在扫描信标时填充。扫描时,数据来自称为扫描响应的单独数据包。出于实际目的,它是只读的。

可以更改出现在 phone 自己的扫描响应中的 phone 的 BLE 名称。但是,更改此名称不仅会影响信标传输,还会影响 phone 上的所有蓝牙操作。这是图书馆的 BeaconTransmitter 不更改此名称的另一个原因。但是,您可以自己这样做,方法是在 Android 的 BluetoothAdapter class.

上调用 setName 方法