Android 中的 Gatt 服务器设备名称长度
Gatt server device name length in Android
我正在让 Gatt 服务器应用程序在 android 设备上运行并且运行良好。
但是我对设备名称有疑问。
我用我的 "Nexus 5X" 创建了这个应用程序,它的默认设备名称是 "Nexus 5x",Gatt 客户端可以很好地扫描这个设备。
但是,如果 "Galaxy S7" 上的服务器 运行,客户端找不到服务器设备。
所以,我检查了服务器的设备名称,默认是"Samsung Galaxy S7"。将名称更改为"gal7"后,效果很好。
在我的测试中,android gatt 服务器允许设备名称长度最多 8 个字符。
"Nexus 5x" --> 很好
"Galaxy S7" --> 不好
"Nexus" --> 很好
"long name device" --> 不好
gatt 服务器设备名称长度限制是否有任何原因(是否有错误)?
你的问题是advertise packet最多只能有31个字节。删除一些 headers 后,设备名称剩下 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 个字符)。
我正在让 Gatt 服务器应用程序在 android 设备上运行并且运行良好。
但是我对设备名称有疑问。
我用我的 "Nexus 5X" 创建了这个应用程序,它的默认设备名称是 "Nexus 5x",Gatt 客户端可以很好地扫描这个设备。
但是,如果 "Galaxy S7" 上的服务器 运行,客户端找不到服务器设备。
所以,我检查了服务器的设备名称,默认是"Samsung Galaxy S7"。将名称更改为"gal7"后,效果很好。
在我的测试中,android gatt 服务器允许设备名称长度最多 8 个字符。
"Nexus 5x" --> 很好
"Galaxy S7" --> 不好
"Nexus" --> 很好
"long name device" --> 不好
gatt 服务器设备名称长度限制是否有任何原因(是否有错误)?
你的问题是advertise packet最多只能有31个字节。删除一些 headers 后,设备名称剩下 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 个字符)。