目前,我正在使用涉及从ble设备读取数据的应用程序。我正在尝试从Andesfit温度计,Andesfit血压,Andesfit体重秤读取数据。
为此,我需要使用特征UUID进行通知。通知的东西工作正常,并且任何设备发出数据时我都可以正确接收数据。
考虑用户已经使用血压机进行测量的情况。然后他拿起设备,建立连接。我应该能够检索最后一条记录并将其显示在设备中。
为了显示最后一条记录,我需要使用UUID读取特征
在iOS中,我可以检索最后一条记录并使用相同的特征性UUID进行通知,并且可以正常工作。
characteristic UUID is 2A1C
peripheral.setNotifyValue(true, for: characteristic)
peripheral.readValue(for: characteristic)
但是在Android中,如果我尝试使用用于通知的特征性UUID进行阅读,则会给我例外。
rxBleDevice.establishConnection(false, Timeout(12000, TimeUnit.MILLISECONDS))
.flatMapSingle { rxBleConnection ->
rxBleConnection.readCharacteristic(UUID.fromString("00002a1c-0000-1000-8000-00805f9b34fb"))
.subscribe({bytes ->
},{t: Throwable? ->
var mess = t!!.localizedMessage
t.printStackTrace()
})
异常消息为
MAC地址F4:5E:AB:0D:7B:93的GATT异常,类型为BleGattOperation {description ='CHARACTERISTIC_READ'}] >>
这是我在Android中的服务发现操作
在我的服务发现中,我可以清楚地看到此特征性的UUID仅用于通知。
V/RxBle#ServiceDiscoveryOperation: Primary Service - Health Thermometer (00001809-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: Instance ID: 51
V/RxBle#ServiceDiscoveryOperation: -> Characteristics:
V/RxBle#ServiceDiscoveryOperation: * Temperature Measurement (00002a1c-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: Properties: [ INDICATE ]
V/RxBle#ServiceDiscoveryOperation: -> Descriptors:
V/RxBle#ServiceDiscoveryOperation: * Client Characteristic Configuration (00002902-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: * Characteristic Presentation Format (00002904-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: * Temperature Type (00002a1d-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: Properties: [ READ ]
V/RxBle#ServiceDiscoveryOperation: * Intermediate Temperature (00002a1e-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: Properties: [ NOTIFY ]
V/RxBle#ServiceDiscoveryOperation: -> Descriptors:
V/RxBle#ServiceDiscoveryOperation: * Client Characteristic Configuration (00002902-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: * Measurement Interval (00002a21-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: Properties: [ READ WRITE INDICATE ]
V/RxBle#ServiceDiscoveryOperation: -> Descriptors:
V/RxBle#ServiceDiscoveryOperation: * Client Characteristic Configuration (00002902-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: * Valid Range (00002906-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: Primary Service - Battery Service (0000180f-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: Instance ID: 65
V/RxBle#ServiceDiscoveryOperation: -> Characteristics:
V/RxBle#ServiceDiscoveryOperation: * Battery Level (00002a19-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: Properties: [ READ NOTIFY ]
V/RxBle#ServiceDiscoveryOperation: -> Descriptors:
V/RxBle#ServiceDiscoveryOperation: * Client Characteristic Configuration (00002902-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: * Report Reference (00002908-0000-1000-8000-00805f9b34fb)
V/RxBle#ServiceDiscoveryOperation: --------------- ====== Finished peripheral content ====== ---------------
当前,我正在使用一个涉及从ble设备读取数据的应用程序。我正在尝试从Andesfit温度计,Andesfit血压,Andesfit体重秤读取数据。 ...
为什么使用相同的UUID可以正常工作(在iOS和Android上不能正常工作?