Я изучаю файл Bluetooth на Android и столкнулся с проблемой невозможности получить ответ от характеристики записи.Аппаратное обеспечение, которое я использую, - это HM-10, у которого есть сервис и характеристики, к которым я могу написать - кое-что, что, я уверен, касается кода, который я написал.
Я следил за статьей на Android-разработчике для настройки bluetooth gatt.Обратный вызов содержит onDescriptorRead / Write, onCharacteristicRead / Write, onServicesDiscovered, onCharacteristicChanged, в том числе широковещательный приемник для обновления информации от службы к действию.Я также попытался подключить HM-10 к своему компьютеру и использую RealTerm для отправки данных из моего телефонного приложения.Я подтверждаю, что данные, которые я отправляю, проходят.Но при отправке данных с компьютера через HM-10 я не получаю информацию из моего телефонного приложения.(onCharacteristicChanged или onCharacteristicRead) Перед выполнением отправки я изменяю настройку уведомления для признака на включенный.
Дескриптор - CCCD (0x2902). Характеристика является пользовательской, которая согласно документации обрабатывает READ, WRITE, NOTIFY.Честно говоря, я не знаю, как это проверить в коде.
Команда для отправки на характеристику.
if (characteristic.equals("0000ffe1-0000-1000-8000-00805f9b34fb")) {
characteristic.setValue("AT+CSQ?");
}
bluetoothGatt.writeCharacteristic(characteristic);
Обратный вызов для записи
@Override
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
Log.w(TAG, "successfully wrote characteristic");
broadcastWrite(ACTION_WRITE_AVAILABLE, characteristic);
}
}
Обратный вызов для характеристики чтения
@Override
// Result of a characteristic read operation
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
}
}
обратный вызов для измененного признака
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
Log.w(TAG, "successfully received new characteristic change");
BroadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
}
Команда включения уведомления для признака
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
bluetoothGatt.writeDescriptor(descriptor);
Я ожидаю, что модуль Bluetooth настроен для обработки изменений признака.На самом деле происходит большая черная дыра без ответов.