В настоящее время я работаю с приложением, которое включает чтение данных с устройства 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()
})
Сообщение об исключении:
Исключение GATT из MAC-адреса F4: 5E: AB: 0D: 7B: 93, с типом 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 ====== ---------------