我目前只有一部5.0手机可以测试这个功能(Moto E2 3G在5.0Lollipop上),但我无法在Android 5.0上发布自定义UUID。当我说自定义UUID时,我指的是蓝牙LE规范未预定义的UUID。
在我的Nexus 6 Android 5.1上,一切正常。
AdvertiseData.Builder dataBuilder = new AdvertiseData.Builder();
AdvertiseSettings.Builder settingsBuilder = new AdvertiseSettings.Builder();
// Advertising this spec assigned UUID works
//ParcelUuid temp = new ParcelUuid(UUID.fromString("0000180D-0000-1000-8000-00805f9b34fb"));
// Advertising this custom UUID doesn't work!!
ParcelUuid temp = new ParcelUuid(UUID.fromString("02FD04F4-CFFF-4573-B478-F7470A7CF2F2"));
dataBuilder.addServiceUuid(temp);
settingsBuilder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED); settingsBuilder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH);
settingsBuilder.setConnectable(true);
AdvertiseData ad = dataBuilder.build();
bluetoothLeAdvertiser.startAdvertising(settingsBuilder.build(), ad, null, advertiseCallback);
当查看广告包的摩托罗拉E2与自定义UUID,这里是什么我可以看到-注意没有关于服务UUID的信息:
如果我在Moto E2上公布分配的服务UUID(0000180D-0000-1000-8000-00805f9b34fb),我可以看到UUID的16位表示可用:
如果我在Nexus 6上公布自定义UUID,我会看到预期的UUID数据:
是否有人能够在其他5.0设备上确认此行为?我是否需要制作受支持的最低版本5.1?我在互联网上找到的唯一其他相关参考资料是Android bug追踪器上的这张空票。
虽然大多数设备支持BLE扫描,但只有少数设备支持BLE广告,据我所知,不支持5.0设备。
检查在android代码中使用此代码是否支持您的设备。你可以在任何地方使用它。
BluetoothAdapter.getDefaultAdapter().isMultipleAdvertisementSupported();
这是确定设备是否受支持的最佳方法。如果它不受支持,您就不能以编程方式执行任何操作,请购买支持它的。
我可以确认这是运行5.0.2(可能还有其他设备和/或版本)的Moto G 2014上的一个bug。
我的解决方法是将您的自定义UUID插入制造商数据而不是服务UUID字段。这只有在您可以访问正在扫描它的中心并且可以显式检查制造商数据以查看UUID是否存在以做出连接决定时才有效。
通过我的实现,我可以控制中央检查哪些内容以决定是否连接,因此我只对所有在外围模式下运行的Android设备采用了此方案,而不是使用普通的“addServiceUuid”方法。在Galaxy S6(5.0.2)和Nexus 5X(6.0)上进行了测试,并正常工作。
private AdvertiseData buildAdvertiseData()
{
int manufacturerID = 0x0001;
byte[] uuidBytes = new byte[]{ (byte)0x00, (byte)0x01, (byte)0x02, (byte)0x03, (byte)0x04, (byte)0x05, (byte)0x06, (byte)0x07, (byte)0x08, (byte)0x09, (byte)0x0A, (byte)0x0B, (byte)0x0C, (byte)0x0D, (byte)0x0E, (byte)0x0F };
return new AdvertiseData.Builder()
.addManufacturerData(manufacturerID, uuidBytes)
.setIncludeDeviceName(false)
.build();
}
确保排除设备名称,否则某些设备会将广告数据包置于31个字节之上,并且它将无法启动广告。
我正在尝试通过BLE将ESP32模块连接到我的iPhone,并使用其中,让carServiceCBUUID=CBUUID(字符串:“c0de0001-feed-f00d-c0ff-eeb3d05ebeef”)。我正在学习Ray Wenderlich的心脏监护仪教程,但由于ESP32蓝牙模块没有公布主要服务UUID,因此当我扫描外围设备时,它找不到该设备。附件是BLE设备上浅蓝色信息的屏幕截图。是否
在BLE制造商数据中,当从字节转换为字符串时,我得到如下数据: JLG BLE ��������ÿSPH90234380,100084 ,������������������. 即使是从字节到十六进制再到十六进制到字符串的转换,也只能像这样打印。 十六进制格式: 0201608084A4C4720424C45020A0A0FFF5307043734353393600000015FF53075048
目前我正在研究心率监测器,我发现“2A37”是uuid,用于从hrm设备获取心率数据。然后我搜索了很多,但我没有找到,为什么我应该使用“2A37”而不是其他来获取心率数据。 我已经浏览了蓝牙网站下面链接的信息,但仍然感到困惑。 https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx. 任何人都可以让我了解如何为不同
在这一步中,我们会改进我们APP获取数据的方式。 请重置工作目录: git checkout -f step-11 对我们应用所做的最后一个改进就是定义一个代表RESTful客户端的定制服务。有了这个客户端我们可以用一种更简单的方式来发送XHR请求,而不用去关心更底层的$http服务(API、HTTP方法和URL)。 步骤9和步骤10之间最重要的不同在下面列出。你可以在GitHub里看到完整的差别
我一直在试验Qt的示例项目,心率服务器。我让它在Linux上运行,我的iPhone应用程序成功地识别出心率外围设备,连接到它,并获得有关心率值变化的通知。 现在我想修改心率示例项目以宣传具有自定义特征的自定义服务。我为自定义服务和特征生成了两个128位UUID,但当我更改代码以宣传它们时,我的iPhone应用程序始终识别具有HeartRateInstr测量特征的心率服务。 我甚至尝试过为没有服务的
我正在通过BLE编写一个自定义服务来传输自定义特性。它有自己的UUID,如“8E400001-B5A3-F393-E0A9-E50E24DCA9E”。 我发现我希望支持的特定android应用程序(BLE客户端)需要在广告包中包含自定义服务UUID。 然而,我们的外围设备是通过debian上的bluez 5.43运行的,我不知道如何将这个UUID放入广告包中。 我想会是这样的: <代码>hcito