不同SDK级别的Android UUID长度不同?
我想通过BLE广播一些数据 addServiceData函数接受一个parcelouid和数据 我在我的安卓7.0智能手机上测试了它,Uuid缩小到了16位 虽然此实用程序创建了一个128位UUID,但仅限于Android系统 将16位UUID用于播发,并将自动调整 要符合的128位UUID 这很好,因为我需要发送数据的带宽。但是相同的应用程序在安卓8.1设备上发送完整的128位Uuid 我不明白这一点,我希望我的应用程序总是发送16位Uuid。不同SDK级别的Android UUID长度不同?,android,bluetooth-lowenergy,uuid,Android,Bluetooth Lowenergy,Uuid,我想通过BLE广播一些数据 addServiceData函数接受一个parcelouid和数据 我在我的安卓7.0智能手机上测试了它,Uuid缩小到了16位 虽然此实用程序创建了一个128位UUID,但仅限于Android系统 将16位UUID用于播发,并将自动调整 要符合的128位UUID 这很好,因为我需要发送数据的带宽。但是相同的应用程序在安卓8.1设备上发送完整的128位Uuid 我不明白这一点,我希望我的应用程序总是发送16位Uuid。 我找不到选择Uuid长度的选项。16位蓝牙U
我找不到选择Uuid长度的选项。16位蓝牙Uuid是以下各项的快捷方式:
0000xxxx-0000-1000-8000-00805F9B34FB
…其中,xxxx
是16位。例如,如果您想为牛肉
UUID做广告,我相信您需要将0000BEEF-0000-1000-8000-00805F9B34FB
传递到AdvertiseData.Builder
再往下看,Android应该将其识别为16位蓝牙UUID,并仅广播这两个字节。相关代码位于AOSP中的和类中:
public static byte[] uuidToBytes(ParcelUuid uuid) {
if (uuid == null) {
throw new IllegalArgumentException("uuid cannot be null");
}
if (is16BitUuid(uuid)) {
byte[] uuidBytes = new byte[UUID_BYTES_16_BIT];
int uuidVal = getServiceIdentifierFromParcelUuid(uuid);
uuidBytes[0] = (byte) (uuidVal & 0xFF);
uuidBytes[1] = (byte) ((uuidVal & 0xFF00) >> 8);
return uuidBytes;
}
...
我猜这种行为可能在7.0和8.1之间发生了变化。看起来就像之前一样,他们可能已经将128位UUID转换为16位UUID,不管发生什么。现在,看起来只有在128位UUID遵循蓝牙标准/符号的情况下,它才能正确地执行此操作