查找Android蓝牙LE GATTconfiguration文件

我已经实现了Android LE蓝牙的例子,find一个心率监测器并连接到它。 但是,这个例子有一个定义GATTconfiguration文件的类,如下所示:

private static HashMap<String, String> attributes = new HashMap(); public static String HEART_RATE_MEASUREMENT = "00002a37-0000-1000-8000-00805f9b34fb"; public static String CLIENT_CHARACTERISTIC_CONFIG = "00002902-0000-1000-8000-00805f9b34fb"; static { // Sample Services. attributes.put("0000180d-0000-1000-8000-00805f9b34fb", "Heart Rate Service"); attributes.put("0000180a-0000-1000-8000-00805f9b34fb", "Device Information Service"); // Sample Characteristics. attributes.put(HEART_RATE_MEASUREMENT, "Heart Rate Measurement"); attributes.put("00002a29-0000-1000-8000-00805f9b34fb", "Manufacturer Name String"); } public static String lookup(String uuid, String defaultName) { String name = attributes.get(uuid); return name == null ? defaultName : name; } 

现在,我想要做的就是改变它,让这个程序find任何设备与蓝牙乐,但我不知道如何谷歌已经得到的信息,心率测量的客户端特征configuration。

有没有一个网站的地方,我找不到所有这些信息?

蓝牙技术联盟维护一个“ 分配号码 ”列表,其中包括示例应用程序中find的那些UUID : https : //www.bluetooth.org/en-us/specification/assigned-numbers

虽然UUID的长度是128位,但蓝牙LE的分配号码被列为16位hex值,因为低96位在一类属性中是一致的。

例如,所有BLE特征UUID的格式如下:

 0000XXXX-0000-1000-8000-00805f9b34fb 

心率测量特征UUID的分配号码被列为0x2A37 ,这是示例代码的开发者可以如何到达:

 00002a37-0000-1000-8000-00805f9b34fb 

除了@Godfrey Duke的回答,下面是我用来提取UUID的有效位的方法:

 private static int getAssignedNumber(UUID uuid) { // Keep only the significant bits of the UUID return (int) ((uuid.getMostSignificantBits() & 0x0000FFFF00000000L) >> 32); } 

使用示例:

  // See https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.heart_rate.xml private static final int GATT_SERVICE_HEART_RATE = 0x180D; (...) for (BluetoothGattService service : services) { if (getAssignedNumber(service.getUuid()) == GATT_SERVICE_HEART_RATE) { // Found heart rate service onHeartRateServiceFound(service); found = true; break; } } 

这是gattcallback页面: https : //developer.android.com/reference/android/bluetooth/BluetoothGatt.html

您需要使用BluetoothGatt.discoverServices();

然后在callbackonServicesDiscovered(…)我想你需要使用BluetoothGatt.getServices();