如何解决“蓝牙文件中的写入特征不响应”的问题?

时间:2019-04-23 22:28:42

标签: android bluetooth-lowenergy

我正在Android上学习蓝牙文件,并且遇到了无法从写入特性获得响应的问题。我使用的硬件是HM-10,它具有我可以写的服务和特性-我确定这与我编写的代码有关。

我已经按照android开发人员的文章设置了蓝牙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);

我希望设置蓝牙适配器以处理特征变化。实际发生的是一个没有响应的大黑洞。

1 个答案:

答案 0 :(得分:0)

进一步研究后,结合使用setCharacteristicNotification和CCCD描述符上的Notification设置的更改,已成功解决了该问题。