Android 中的 Gatt 服务器设备名称长度

Kyo*_* Yi 3 android bluetooth-lowenergy gatt

我正在制作一个在 android 设备上运行的 Gatt 服务器应用程序,它运行良好。

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

我用我的“Nexus 5X”创建了这个应用程序,它的默认设备名称是“Nexus 5x”,Gatt 客户端可以很好地扫描这个设备。

但是,如果服务器运行在“Galaxy S7”上,客户端将无法找到服务器设备。

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

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

“Nexus 5x”--> 很好

“Galaxy S7”--> 不好

“Nexus”--> 很好

“长名称设备”--> 坏

是否有任何原因(错误与否),gatt 服务器设备名称长度限制?

The*_*mer 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 */);
Run Code Online (Sandbox Code Playgroud)

这样做是发送带有广告打包的主要服务的 UUID,同时保持 Rx 通道打开以接收将发送名称的扫描响应请求(我认为最多 27 个字符)。