Я пытаюсь получить значение датчика выше BLE.Я могу подключиться к датчику, и вызывается onCharacteristicRead, но вызов BluetoothGattCharacteristc.value или .getStringValue (0) и т. Д. Всегда возвращает имя устройства датчика вместо значения характеристики.
Я могу получить доступ к значению датчика с помощьюПриложение BLE на моем телефоне, поэтому я знаю, что датчик отправляет правильное значение.
BluetoothGattCallback:
private val gattCallback = object : BluetoothGattCallback() {
override fun onConnectionStateChange(gatt: BluetoothGatt?, status: Int, newState: Int) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
bluetoothGatt?.discoverServices()
}
}
override fun onServicesDiscovered(gatt: BluetoothGatt?, status: Int) {
if (status == BluetoothGatt.GATT_SUCCESS) {
for (service: BluetoothGattService in bluetoothGatt!!.services) {
Log.i(TAG, service.uuid.toString())
Log.i(TAG, service.characteristics.size.toString())
for (characteristic: BluetoothGattCharacteristic in service.characteristics) {
//Read
bluetoothGatt?.readCharacteristic(characteristic)
if(characteristic.uuid == CHARACTERISTIC_UUID){
//Notify
Log.i(TAG, characteristic.getDescriptor(CLIENT_CHARACTERISTIC_CONFIG_UUID).uuid.toString())
bluetoothGatt?.setCharacteristicNotification(characteristic, true)
val descriptor = characteristic
.getDescriptor(CLIENT_CHARACTERISTIC_CONFIG_UUID).apply {
value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE
}
bluetoothGatt?.writeDescriptor(descriptor)
}
}
}
}
}
override fun onCharacteristicRead(
gatt: BluetoothGatt?,
characteristic: BluetoothGattCharacteristic?,
status: Int
) {
if (status == BluetoothGatt.GATT_SUCCESS) {
Log.i(TAG, characteristic!!.getStringValue(0)) // Returns device name
Log.i(TAG, String(characteristic.value)) // Returns device name
} else {
Log.w(TAG, "GATT failure")
}
}
override fun onCharacteristicChanged(gatt: BluetoothGatt?, characteristic: BluetoothGattCharacteristic?) {
Log.i(TAG, String(characteristic!!.value))
}
}
onCharacteristicRead вызывается, но возвращаются неправильные значения.onCharacteristicChanged никогда не вызывается, хотя значения датчиков постоянно обновляются.Что я сделал не так?