Android中Gatt服务器设备名称的长度是多少?

3

我正在制作一款在Android设备上运行的Gatt服务器应用程序,并且它工作得很好。

但是我有一个与设备名称有关的问题。

我使用我的"Nexus 5X"创建了此应用程序,它的默认设备名称为"Nexus 5x",Gatt客户端可以很好地扫描到此设备。

然而,如果服务器在"Galaxy S7"上运行,则客户端无法找到服务器设备。

因此,我检查了服务器的设备名称,默认情况下为"Samsung Galaxy S7"。将名称更改为"gal7"后,它正常工作。

在我的测试中,Android Gatt服务器允许设备名称长度最大为8个字符。

"Nexus 5x" --> 正常

"Galaxy S7" --> 不正常

"Nexus" --> 正常

"long name device" --> 不正常

是否存在Gatt服务器设备名称长度限制的任何原因(是否存在错误)?

1个回答

7

你的问题在于广告包最多只能有31个字节。当你删除一些头部后,你只剩下8个字节用于设备名称(假设你在广告中包含一个服务UUID)。如果你想在广告中包括设备名称,正确的方法是这样的:

AdvertiseSettings mAdvertiseSettings = new AdvertiseSettings.Builder()
        .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY)
        .setConnectable(true)
        .setTimeout(0)
        .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM)
        .build();
AdvertiseData mAdvertiseData = new AdvertiseData.Builder()
        .setIncludeDeviceName(false)
        .addServiceUuid(new ParcelUuid(MY_SERVICE_UUID))
        .build();
AdvertiseData mScanResponseData = new AdvertiseData.Builder()
        .setIncludeDeviceName(true)
        .build();
BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser()
        .startAdvertising(mAdvertiseSettings, mAdvertiseData,
                mScanResponseData, this /* AdvertiseCallback */);

这段代码的作用是在广告包中发送主服务的UUID,同时保持Rx通道开放以便扫描响应请求发送名称(最多27个字符)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接